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;
}
完整展示雙向循環鏈結串列的建立、查找、列印操作,含記憶體配置錯誤檢查。