首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C語言雙向循環鏈結串列完整程式碼實作

     編輯:C 語言基礎

資料結構定義

typedef struct node {
    char name[20];
    struct node *llink, *rlink;
} stud;

建立串列

stud *creat(int n) {
    stud *h, *p, *s;
    h = (stud*)malloc(sizeof(stud));  // 表頭節點
    h->name[0] = '\0';
    h->llink = h->rlink = NULL;
    p = h;
    for (int i = 0; i < n; i++) {
        s = (stud*)malloc(sizeof(stud));
        p->rlink = s;
        printf("輸入第 %d 人姓名: ", i+1);
        scanf("%s", s->name);
        s->llink = p;
        s->rlink = NULL;
        p = s;
    }
    h->llink = p;   // 尾節點左鏈指向最後節點
    p->rlink = h;   // 尾節點右鏈指向表頭,形成循環
    return h;
}

查找與列印

stud *search(stud *h, char *x) {
    stud *p = h->rlink;
    while (p != h) {
        if (strcmp(p->name, x) == 0) return p;
        p = p->rlink;
    }
    printf("Not found\n");
    return NULL;
}

void print(stud *h) {
    stud *p = h->rlink;
    printf("資料: ");
    while (p != h) {
        printf("%s ", p->name);
        p = p->rlink;
    }
    printf("\n");
}

主程式

int main(void) {
    stud *head, *found;
    char name[20];
    head = creat(10);
    print(head);
    printf("輸入要查找的姓名: ");
    scanf("%s", name);
    found = search(head, name);
    if (found) printf("找到: %s\n", found->name);
    return 0;
}

完整展示雙向循環鏈結串列的建立、查找、列印操作,含記憶體配置錯誤檢查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved