c語言實現雙向迴圈鍊錶

2021-08-09 08:06:03 字數 2814 閱讀 1345

雙鏈表實現直通車:

單迴圈鍊錶實現直通車:

雙鏈表的實現與上面兩者都有大量相似之處。

實現功能部分:

/*雙迴圈鍊錶的實現*/

//基於雙鏈表實現, 大體區別是尾節點後繼指向頭節點, 頭節點的前驅指向尾節點

//主要區別還是列印, 插入節點(首 中 尾)前插 後插. 刪除節點(首 尾) 需要特別注意

#include#include#includetypedef struct dblink

node;

int empty(node *head); //判空

void print(node *head); //列印

void transprint(node *head); //反向列印

void createnode(node *head, node **p, int data); //建立節點

void add(node **head, int data); //向鍊錶尾部新增節點

node *findposnode(node *head, int pos); //根據位置找節點

node *finddatanode(node *head, int data); //根據data找第乙個節點, 沒有返回null

void insert(node **head, int data); //某個節點前插入(包括頭插)

int gettoatalnode(node *head); //獲取節點總數

void deletenode(node **head, int data); //刪除內容為data的節點

void freeall(node **head); //銷毀鍊錶

**實現部分:

int emptylink(node *head)

else

}void print(node *head)

printf("\n");

}}void transprint(node *head)

while(head != null)

printf("\n");

}}//新建立的節點前後指向都為head

void createnode(node *head, node **p, int data)

else

}//新增在鍊錶的尾部

//為空建立新增節點,, 不為空尾部插入...

void add(node **head, int data)

else //鍊錶尾部新增節點

createnode(*head, &p, data);

h->next = p;

p->prv = h;

(*head)->prv = p;

}}int gettoatalnode(node *head) //獲取節點總數

}return num;

}node *findposnode(node *head, int pos) //根據位置找節點, 沒有返回null

while(pos-1)

return head;

}node *finddatanode(node *head, int data) //根據data找第乙個節點, 沒有返回null

head = head->next;

if(head == first)

break;

}if(flag == 0)

printf("finddatanode head %p\n", head);

return head;

}void insert(node **head, int data) //某個節點前插入或者後插入

printf("head %p", (*head));

printf("\nfind %p", find);

int newdata;

printf("請輸入插入節點的資料:");

scanf("%d", &newdata);

node *create = null;

createnode(*head, &create, newdata);

int judge = 0;

printf(":) 前插請敲0,後入請敲1 : ");

scanf("%d", &judge);

if(judge == 0)

}else

}void deletenode(node **head, int data) //刪除資料為data的節點

p1 = p1->next;

if(p1 == *head)

}if(p1 == *head && flag == 1)

if(p1 == *head && flag != 1) //刪除頭節點

else //刪除其他節點

free(p1);

}}void freeall(node **head) //銷毀鍊錶

free(*head);

*head = null;

}

測試**部分:

int main()

如有問題,歡迎指出,共同進步。

C語言實現雙向迴圈鍊錶

list 雙向迴圈鍊錶,帶頭指標 struct list node 初始化頭指標 void list init head struct list node head 量表是否為空 是返回1,否返回0 int list is empty const struct list node head 鍊錶遍歷...

C語言實現雙向迴圈鍊錶

list 雙向迴圈鍊錶,帶頭指標 struct list node 初始化頭指標 void list init head struct list node head 量表是否為空 是返回1,否返回0 int list is empty const struct list node head 鍊錶遍歷...

雙向迴圈鍊錶 C語言實現

雙向迴圈鍊錶的儲存結構 雙向鍊錶也是採用的鏈式儲存結構,它與迴圈鍊錶的區別就是每個資料結點中多了乙個指向前驅元素的指標域 可以有頭結點,也可以沒有。它的儲存結構如下圖 當只有頭結點時 具體 實現 雙向迴圈鍊錶,有頭結點 define crt secure no warnings include in...