對迴圈雙鏈表實現下述功能:
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 頭結點 首先,不要被以下三個片語弄混了 煉表頭 資料內容為第乙個元素的結點。頭指標 指向頭結點元素的指標。頭結點 資料內容無效,其指標是頭指標。一句話描述為 頭指標是指向頭結點的指標,頭結點是指向煉表頭的結點。對於乙個鍊錶來說,頭指標是一定存在的,是訪問鍊錶的入口,如果沒有頭指標則無法對其進行訪...