3.1 鍊錶的概念及結構
概念:鍊錶是一種物理儲存結構上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈
接次序實現的 。
現實中:
實際中煉表的結構非常多樣,以下情況組合起來就有8種鍊錶結構:
單向、雙向
帶頭、不帶頭
迴圈、非迴圈
常見
1. 無頭單向非迴圈鍊錶:結構簡單,一般不會單獨用來存資料。實際中更多是作為其他資料結構的子結
構,如雜湊桶、圖的鄰接表等等。另外這種結構在筆試面試**現很多。
2. 帶頭雙向迴圈鍊錶:結構最複雜,一般用在單獨儲存資料。實際中使用的鍊錶資料結構,都是帶頭雙向
迴圈鍊錶。另外這個結構雖然結構複雜,但是使用**實現以後會發現結構會帶來很多優勢,實現反而
簡單了,後面我們**實現了就知道了。
3.2鍊錶的實現
// 1、無頭單向非迴圈鍊錶增刪查改實現
typedef
int sltdatatype;
typedef
struct slistnode
slistnode;
typedef
struct slist
slist;
void
slistinit
(slist* plist)
;void
slistdestory
(slist* plist)
;slistnode*
buyslistnode
(sltdatatype x)
;void
slistpushfront
(slist* plist, sltdatatype x)
;void
slistpopfront
(slist* plist)
;slistnode*
slistfind
(slist* plist, sltdatatype x)
;// 在pos的後面進行插入
void
slistinsertafter
(slistnode* pos, sltdatatype x)
;// 在pos的前面進行插入
void
slisteraseafter
(slistnode* pos)
;void
slistremove
(slist* plist, sltdatatype x)
;void
slistprint
(slist* plist)
;void
testslist()
;
// 2、帶頭雙向迴圈鍊錶增刪查改實現
typedef
int ltdatatype;
typedef
struct listnode
listnode;
typedef
struct list
list;
void
listinit
(list* plist)
;void
listdestory
(list* plist)
;void
listpushback
(list* plist, ltdatatype x)
;void
listpushback
(list* plist)
;void
listpushfront
(list* plist, ltdatatype x)
;void
listpopfront
(list* plist)
;listnode*
listfind
(list* plist, ltdatatype x)
;// 在pos的前面進行插入
void
listinsert
(listnode* pos, ltdatatype x)
;// 刪除pos位置的節點
void
listerase
(listnode* pos)
;void
listremove
(list* plist, ltdatatype x)
;void
listprint
(list* plist)
;
4.順序表和煉表的區別和聯絡順序表:優點:空間連續、支援隨機訪問
1.中間或前面部分的插入刪除時間複雜度o(n)
2.增容的代價比較大。
鍊錶:
缺點;以節點為單位儲存,不支援隨機訪問
優點:1.任意位置插入刪除時間複雜度為o(1)
2.沒有增容問題,插入乙個開闢乙個空間。
介面實現:
#define _crt_secure_no_warnings 1
#include
"slist.h"
slistnode*
slistbyroom
(slisttype x)
void
slistpopback
(slistnode*
* plist)
while
(tail->next!=
null
)free
(tail)
; head->next =
null;}
void
slistprint
(slistnode*
* plist)
//列印
printf
("null\n");
}void
slistpopfront
(slistnode*
* plist)
//頭刪
else
}void
slistpushfront
(slistnode*
* plist, slisttype x)
//頭插
else
}void
slistpushback
(slistnode*
* plist, slisttype x)
//尾插
else
str->next = newnode;
}}
資料結構 鍊錶
鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...
資料結構 鍊錶
鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...
資料結構 鍊錶
一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...