C 迴圈雙鏈表

2021-07-24 11:54:26 字數 2554 閱讀 1991

雙鏈錶比單鏈表多了乙個prev指標域,用來指向乙個節點的前乙個節點,操作起來比單鏈表快捷許多,可以從前從後遍歷整個鍊錶。

程式:#include

#include

typedef struct dbnode

dbnode;

typedef dbnode * dblink;

void create_empty_list(dblink * head);

void create_newnode(dblink * new_node);

void is_malloc_ok(dblink new_node);

void display_list(dblink head);

void indisplay_list(dblink head);

void insert_node_head(dblink  head, dblink new_node);

void insert_node_tail(dblink head, dblink new_node);

void insert_node_tailhead(dblink head, dblink new_node);

void insert_node_mid(dblink head, dblink new_node, int num);

void insert_node_sort(dblink head, dblink new_node, int num);

void delete_node(dblink head, int num);

void free_list(dblink head);

//void revers_list(dblink head);

int main()

;int num;

create_empty_list(&head);

srand(time(null));

for (i = 0; i < 10; i++)

display_list(head);

printf("please input a num!\n");

scanf("%d", &num);

create_newnode(&new_node);

new_node->num =  num;

insert_node_mid(head,new_node,3);

delete_node(head, 5);

display_list(head);

//revers_list(head);

//printf("\n");

display_list(head);

free_list(head);

display_list(head);

return 0;

}void create_empty_list(dblink *head)

void create_newnode(dblink * new_node)

void is_malloc_ok(dblink new_node)

}void display_list(dblink head)

while (p != head)

}void indisplay_list(dblink head)

while (p != head)

}void insert_node_head(dblink  head, dblink new_node)

void insert_node_tail(dblink head, dblink new_node)

new_node->next = p->next;

new_node->prev = p;

p->next->prev = new_node;

p->next = new_node;

}void insert_node_tailhead(dblink head, dblink new_node)

void insert_node_mid(dblink head, dblink new_node, int num)

while (p->num != num&&p->next != head)

if (p->num == num)

else

}void delete_node(dblink head, int num)

while (p->num != num && p->next != head)

if (p->num == num)

else

}void insert_node_sort(dblink head, dblink new_node, int num)

new_node->num = num;

new_node->next = p;

new_node->prev = p->prev;

p->prev->next = new_node;

p->prev = new_node;

}void free_list(dblink head)

while (p!= head)

printf("release success!\n");

}

迴圈雙鏈表

迴圈雙鏈表的定義和基本運算 include include typedef int elemtype typedef struct dnode 定義雙鏈表結點型別 dlinklist void createlistf dlinklist l,elemtype a,int n 頭插法建雙鏈表 void...

迴圈雙鏈表應用

問題描述 設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert ha,hb,i 其功能是 i 0時,將線性表hb插入到線性表ha的最前面 當i 0時,將線性表hb插入到線性表ha中第i個節點的後面 當i大於等於線性表ha的長度時,將線性表hb插入到線性表ha的最後面。請在實...

迴圈雙鏈表演算法

設乙個帶頭結點的迴圈雙鏈表 dl,結點的值可能重複。設 計乙個演算法輸出 dl 所有元素的值,引數 d 0 時按照前驅方向輸出,d 1 時按照 後繼方向輸出。記得那次作業裡有乙個寫的很麻煩沒啥意思好像就是這個 建立乙個迴圈單鏈表,然後設乙個輸出函式 include include include d...