1. 程式人生 > 實用技巧 >雙向連結串列(C語言)

雙向連結串列(C語言)

雙向連結串列(C語言)

  一:初始化以及建立:

struct Node {
    int data;
    Node* prior;
    Node* next;
};

int Init(Node* L) {//初始化
    Node* temp = (Node*)malloc(sizeof(Node));
    if (!L)
        return  -1;
    L->prior = NULL;//前面是指標引進,所以不需要使用指標符號來指向
    L->next = NULL;
}

int CreateNewData(Node* L) {//建立新表
    int
n; Node* p = L; printf("請輸入你要輸入的個數\n"); scanf("%d", &n); for (int i = 1; i <= n; i++) { Node* q = (Node*)malloc(sizeof(Node)); p->next = q; printf("請輸入第%d個元素的值", i); scanf("%d", &q->data); q->prior = p;//主要元素仍然是p,而p也只是暫時存在為記憶體地址分配對應的值的
q->next = NULL; p = q; } return 0; }

  二:插入以及刪除操作

int InsertData(Node* L, int num, int elem) {
    Node* p, * q;
    int i;
    p = L;
    for (int i = 1; i < num; i++) {
        p = p->next;
    }
    q = (Node*)malloc(sizeof(Node));
    if (q) {//這裡需要好好琢磨一下,比較難理解的
q->data = elem; p->next->prior = q; q->next = p->next; p->next = q; q->prior = p; } return 0; } int DeleData(Node* L, int num) { Node* p, * q; //需要的就是把需要刪除的位置跳過去就可以了,同時釋放那個記憶體所佔用的空間 p = L->next; q = L; for (int i = 1; i < num; i++) { p = p->next; q = q->next; } p->next->prior = q; q->next = p->next; free(p); return 0; }

  附加圖示理解:

  三:雙向連結串列遍歷:

void print(Node *L)    {//輸出雙向連結串列的所有的元素
    Node *p;
    p=L->next;

    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}