(含頭指標以及尾指標)迴圈雙向鍊錶各類功能的實現

2022-04-07 12:57:01 字數 3817 閱讀 9547

對迴圈雙鏈表實現下述功能:

void meau(); //選單函式

void initlist(list *list); //初始化

void show(list *list); //列印鍊錶內容

bool push_back(list *list,elemtype x); //尾插法

bool push_front(list *list,elemtype x);//頭插法

bool isempty(list *list); //判斷鍊錶是否為空

bool pop_back(list *list); //尾刪法

bool pop_front(list *list); //頭刪法

node *find_val(list *list,elemtype x); //按值查詢

bool delete_val(list *list,elemtype x);//按值刪除

bool modify(list *list,elemtype x); //修改

void clear(list *list); //清空鍊錶

void destory(list *list); //摧毀鍊錶

void reverse(list *list); //逆置鍊錶

node *prio(list *list,elemtype x); //求某個值的前驅

node *next(list *list,elemtype x); //求某個值的後繼

bool insert_val(list *list,elemtype x);//按值插入

void sort(list *list); //排序(公升序)

dclist.h:

#ifndef __dclist_h__

#define __dclist_h__

#include

#include

using namespace std;

typedef int elemtype;

typedef struct node

node;

typedef struct list

list;

void meau(); //選單函式

void initlist(list *list); //初始化

void show(list *list); //列印鍊錶內容

bool push_back(list *list,elemtype x); //尾插法

bool push_front(list *list,elemtype x);//頭插法

bool isempty(list *list); //判斷鍊錶是否為空

bool pop_back(list *list); //尾刪法

bool pop_front(list *list); //頭刪法

node *find_val(list *list,elemtype x); //按值查詢

bool delete_val(list *list,elemtype x);//按值刪除

bool modify(list *list,elemtype x); //修改

void clear(list *list); //清空鍊錶

void destory(list *list); //摧毀鍊錶

void reverse(list *list); //逆置鍊錶

node *prio(list *list,elemtype x); //求某個值的前驅

node *next(list *list,elemtype x); //求某個值的後繼

bool insert_val(list *list,elemtype x);//按值插入

void sort(list *list); //排序(公升序)

#endif

dclist.cpp:#includedclist.h

/*選單函式*/

void meau()

/*尾插法*/

bool push_back(list *list,elemtype x)

else

return false;

}/*列印鍊錶內容*/

void show(list *list)

cout

/*和後面元素(原來的第乙個元素)連線*/

s->next = list->first->next;

list->first->next->pre = s;

/*和頭結點連線*/

list->first->next = s;

s->pre = list->first;

/*若是第乙個節點,尾指標該指向它*/

if(list->size == 0)

list->size++;

return true;

} else

/*尾刪法*/

bool pop_back(list *list)

bool pop_front(list *list)

free(s);

list->size--;

return true;

}/*查詢函式:找到指定元素:返回指向它的指標,找不到:返回null*/

node *find_val(list *list,elemtype x)

return null;

}/*按值刪除結點*/

bool delete_val(list *list,elemtype x)

return true;

} else

else if(s == list->last)//為什麼沒加else,刪除頭結點會出錯???

else

return true;

} else

else

list->last = list->first;

list->size = 0;

}/*銷毀鍊錶*/

void destory(list *list)

/*鍊錶逆置:保留第乙個結點,將剩餘的結點游離出來,然後依次頭插到保留的結點中*/

void reverse(list *list) }

/*求指定元素的前驅*/

node *prio(list *list,elemtype x)

} else }

else

/*插入*/

p->next = s->next;

s->next->pre = p;

p->pre = s;

s->next = p;

/*若要插入位置的前驅是最後乙個結點,即尾插,則尾指標需要改變指向*/

if(s == list->last)

list->size++;

return true;

}/*公升序*/

void sort(list *list)

}main.cpp:

#includedclist.h

int main()

} destory(&mylist);

return 0;

}

迴圈鍊錶尾指標

1 對於兩個鍊錶之間的操作非常合適 include string.h include ctype.h include stdio.h include stdlib.h include io.h include math.h include time.h define ok 1 define erro...

迴圈鍊錶 建立(設定尾指標)

迴圈鍊錶設定尾指標可以通過尾指標即時找到頭節點 便於兩個迴圈鍊錶的合併!擼 單迴圈鍊錶是設定尾指標表示 合併迴圈鍊錶o 1 include include includeusing namespace std struct node node crate cir node head,int n he...

在鍊錶中使用頭結點與尾指標

1 頭結點 首先,不要被以下三個片語弄混了 煉表頭 資料內容為第乙個元素的結點。頭指標 指向頭結點元素的指標。頭結點 資料內容無效,其指標是頭指標。一句話描述為 頭指標是指向頭結點的指標,頭結點是指向煉表頭的結點。對於乙個鍊錶來說,頭指標是一定存在的,是訪問鍊錶的入口,如果沒有頭指標則無法對其進行訪...