前面複習了單鏈表,單鏈表的尾結點的特點是next域為null(空);而我們今天要複習的迴圈單鏈表,和單鏈表基本類似。
區別就在於:
迴圈單鏈表的尾結點的next域為頭結點。
老規矩,先上頭檔案:
筆者這裡的命名為:clist.h
#pragma once
// 帶頭結點的迴圈單鏈表
// 尾結點的next指向頭結點
typedef
struct cnode
cnode,
* clist;
// 初始化函式
void
initlist
(clist plist)
;// 判空
bool isempty
(clist plist)
;// 獲取資料長度
intgetlength
(clist plist)
;// 頭插
bool insert_head
(clist plist,
int val)
;// 尾插
bool insert_tail
(clist plist,
int val)
;// 在plist中查詢關鍵字key,找到返回目標位址,失敗返回null
clist search
(clist plist,
int key)
;// 刪除plist中的第乙個key
bool deleteval
(clist plist,
int key)
;// 列印輸出所有資料
void
show
(clist plist)
;// 逆置(重中之重)
void
reverse
(clist plist)
;// 清空資料
void
clear
(clist plist)
;// 銷毀動態記憶體
void
destroy
(clist plist)
;
接下來是**檔案,命名為clist.cpp
#include
#include
#include
#include
"clist.h"
// 初始化函式
void
initlist
(clist plist)
// 判空
bool isempty
(clist plist)
// 獲取資料長度
intgetlength
(clist plist)
return count;
}// 頭插
bool insert_head
(clist plist,
int val)
// 尾插
bool insert_tail
(clist plist,
int val)
//p->next = q->next;與下方語句等價
p->next = plist;
q->next = p;
return true;
}// 在plist中查詢關鍵字key,找到返回目標位址,失敗返回null
clist search
(clist plist,
int key)
}return
null;}
// 查詢key的前驅結點,成功返回key的前驅,失敗返回null
static cnode*
searchprio
(clist plist,
int key)
}return
null;}
// 刪除plist中的第乙個key
bool deleteval
(clist plist,
int key)
else
}// 列印輸出所有資料
void
show
(clist plist)
printf
("\n");
}// 逆置(重中之重)
void
reverse
(clist plist)
}// 清空資料
void
clear
(clist plist)
// 銷毀動態記憶體
void
destroy
(clist plist)
}
如下**簡單測試一下我們寫的函式:
#include
#include
#include
"clist.h"
intmain()
show
(&head)
;printf
("逆置後:\n");
reverse
(&head)
;show
(&head)
;printf
("目前鍊錶長度:%d\n"
,getlength
(&head));
printf
("刪除第乙個\"0\"後\n");
deleteval
(&head,0)
;show
(&head)
;printf
("目前鍊錶長度:%d\n"
,getlength
(&head));
destroy
(&head)
;return0;
}
輸出結果如下:
嚴蔚敏. 資料結構(c語言版). 北京:清華大學出版社,2009:30.
資料結構 帶頭結點的單鏈表
比較坑爹的基礎啊,大把時間浪費在建構函式上,建構函式 出生決定命運!自己解決的bug,感覺還不錯。其實程式的核心是演算法,演算法建立在資料結構的基礎之上。大部分的程式設計師現在學的基本都是規則,而不是創造。但掌握了規則,也能創造很多財富。重新鞏固我弱爆了的資料結構,沒敲完資料結構的程式設計師不是好領...
複習之資料結構 帶頭結點的雙向鍊錶
我們會發現,單鏈表由於只有next域,所以,如果想要訪問某個元素的前驅結點,那麼只能從頭開始遍歷到該元素的前乙個元素。效率非常的低下。於是,為了方便的訪問前驅 後繼,雙向鍊錶應運而生。如上圖所示,就是乙個簡單的雙向煉表示意圖。雙向鍊錶共含有三個元素 1 存放資料 2 後繼指標域 3 前驅指標域。雙向...
資料結構 單鏈表 帶頭結點和不帶頭結點
1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...