雙向連結串列(C語言)
阿新 • • 發佈:2020-09-20
雙向連結串列(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) {//建立新表 intn; 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; } }