資料結構——雙向迴圈連結串列
阿新 • • 發佈:2018-12-17
程式碼實現
typedef struct node { int data;//資料域 struct node *next; struct node *prev; }NODE,*PNODE; PNODE init_dc_list(void)//雙向迴圈連結串列的初始化 { PNODE phead = malloc(sizeof(NODE)); if(phead ==NULL) return phead; phead->prev = phead; phead->next = phead; return phead; } PNODE new_node(int dat)//新建一個節點 { PNODE pnew = malloc(sizeof(NODE)); if(pnew ==NULL) return pnew; pnew->data = dat; pnew->prev = pnew; pnew->next = pnew; return pnew; } //把地址為pnew的節點插入到雙向迴圈連結串列的尾部(頭節點的前面) bool list_add_tail(PNODE phead,PNODE pnew) { if(pnew == NULL || phead == NULL) return false; phead->prev->next = pnew; pnew->prev = phead->prev; phead->prev = pnew; pnew->next = phead; return true; } void show_dc_list(PNODE phead)//雙向迴圈連結串列的遍歷 { PNODE p; if(phead == NULL) return; p = phead->prev; while(p != phead) { printf("%d\t",p->data); p = p->prev; } printf("\n"); } //刪除雙向迴圈連結串列中地址為pdel的節點 bool del_dc_node(PNODE phead,PNODE pdel) { PNODE p; if(phead == pdel || phead == NULL || pdel == NULL) return false; p = phead->next; while(p != phead) { if(p == pdel ) break; p = p->next; } if(p != pdel) return false; pdel->prev->next = pdel->next; pdel->next->prev = pdel->prev; pdel->next = pdel->prev = NULL; return true; } PNODE find_node(PNODE phead,int dat)//雙向迴圈連結串列的查詢 { if(phead == NULL) return phead; PNODE p = phead->next; while(p != phead) { if(p->data == dat) break; p = p->next; } if(p == phead) { printf("dat is not in link list\n"); return NULL; } return p; }