美文网首页
静态链表

静态链表

作者: qianranow | 来源:发表于2021-03-26 09:53 被阅读0次

    #include <stdio.h>
    
    #define MaxSize 10
    
    typedef struct Node {
        int data;
        int next;
    } LNode, SLinkList[MaxSize];
    
    void InitList(SLinkList l) {
        l[0].next = -1;
        for (int i = 1; i < MaxSize; i++) {
            l[i].next = -2;
        }
    }
    
    int ListInsert(SLinkList l, int i, int e) {
        if (i < 1 || i > MaxSize - 1) return -1;
        int j = 0;
        while (j < MaxSize - 1) {
            j++;
            if (l[j].next == -2) break;
        }
        if (l[j].next != -2) return -1; // 数组已满
        LNode p = l[0];
        int k = 0;
        int m = 0;
        while (k < MaxSize) { // 寻找第i-1个结点
            if (k == i-1) break;
            m = p.next;
            p = l[m];
            k++;
        }
        if (p.next == -2) return -1;
        l[j].data = e;
        l[j].next = l[m].next;
        l[m].next = j;
        return 1;
    }
    
    int ListDelete(SLinkList l, int i, int *e) {
        if (i < 1 || i > MaxSize -1) return -1;
        LNode p = l[0];
        int k = 0;
        int m = 0;
        while (k < MaxSize) { // 寻找第i-1个结点
            if (k == i-1) break;
            m = p.next;
            p = l[m];
            k++;
        }
        if (p.next == -2) return -1;
        int n = l[m].next;
        l[m].next = l[n].next;
        *e = l[n].data;
        l[n].next = -2;
        return 1;
    }
    
    void PritfList(SLinkList l) {
        LNode p = l[0];
        while (p.next != -1) {
            p = l[p.next];
            printf("%i\n", p.data);
        }
    }
    
    void Sep() {
        printf("**************\n");
    }
    
    int main() {
        SLinkList l;
        InitList(l);
        ListInsert(l, 1, 34);
        ListInsert(l, 2, 423);
        ListInsert(l, 3, 100);
        ListInsert(l, 4, 200);
        PritfList(l);
        Sep();
        int e = -1;
        ListDelete(l, 1, &e);
        ListDelete(l, 1, &e);
        printf("%i\n", e);
        Sep();
        PritfList(l);
        Sep();
        ListInsert(l, 1, 110);
        ListInsert(l, 3, 11);
        PritfList(l);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:静态链表

          本文链接:https://www.haomeiwen.com/subject/tuulhltx.html