在正式講解鍊錶的拓展問題時,我再談談我對鍊錶框架的看法。
鍊錶的組成成員是結點,但是只有結點是不行的,還需要有鍊錶的框架。這就需要乙個函式來初始化鍊錶,想要敲出乙個函式並不是太難,但是想要你的函式在整個程式中正常執行往往還缺很多,主要原因還是缺乏對於框架性知識的理解,所以在寫鍊錶的時候,首先是定義結點,然後要購買結點,然後初始化鍊錶,最後將結點插入完成鍊錶。
單項迴圈鍊錶
單項迴圈鍊錶和單鏈表相差不大,只不過是將尾指標的後繼指向了頭,區別在於鍊錶初始化的時候修改last指標的指向,last的後繼指標不再指向null,而是指向頭結點的位置,注意就是在建立時用的頭插法和尾插法最後需要修改last指標的指向。在顯示函式的時候不再是遇到空訪問停止,而是遇到頭結點訪問停止。
來看一下主要建立鍊錶的核心**
void
listinit
(slist* psl)
bool listpushback
(slist* psl,
int y)
bool listpushfront
(slist* psl,
int y)
else
psl->size++
; psl->last->next = psl->first;
return true;
}
顯示函式
void
listshow
(slist* psl)
}
雙向鍊錶:
雙向鍊錶和單鏈表差別也不大,雙鏈表相比較單鏈表而言在指標域多了指向前驅結點的指標,這就造成了雙鏈表進行增刪查改等的基礎操作上有了很大的該變,同時又方便了很多。因為雙向鍊錶的時候有了前驅指標這條鏈,就不容易造成鍊錶的斷鏈。來看下面**。
首先是建立節點,這個節點會多乙個prew指標來記錄結點的前驅。
typedef
struct dlistnode
dlistnode;
//建立乙個節點
接下來就是這個鍊錶的怎麼來建立
還是和單鏈表一樣有乙個記錄頭的指標和乙個記錄尾的指標,還有乙個記錄鍊錶長度的無符號整型變數。
在初始化化煉表的時候首先指向鍊錶的2個指標指向頭,而且頭的位址為空。
基本上建立完成後就是完成這個雙鏈表的各項功能,基本上掌握了單鏈表其他鍊錶基本上就能掌握了,因為這裡面的區別不大。
當然我們需要一種更高階的形式展現鍊錶,不能像之前那樣用啥將函式寫出來呼叫,我們需要做個選單。來看**
while(1
)
b. 鍊錶的頭尾插
bool dlistpushback
(slist *psl,
int x)
psl->last->next = s;
s->prew = psl->last;
psl->last = s;
psl->last->next = psl->first;
psl->first->prew = psl->last;
psl->size++
;return true;
}
bool dlistpushfront
(slist* psl,
int x)
else
return true;
}
c. 鍊錶的顯示
void
showdlist
(slist* psl)
}}
剩下操作和單鏈表差異不大,總之想掌握好鍊錶還是需要下和很多功夫,鍊錶的實際操作來說並不算難,但是卻很容易出錯,希望大家和我一起在不斷練習當中慢慢掌握好它,整整做到學以致用。 單鏈表 鍊錶倒置
鍊錶屬於動態資料結構,可以模擬成一 環 接一 環 的鏈條,這裡每一 環 視作乙個結點,結點串在一起形成鍊錶。這種資料結構非常靈活,結點數目無須事先指定,可以臨時生成。每個結點有自己的儲存空間,結點間的儲存空間也無需連線,結點之間的串連由指標來完成,指標的操作又極為靈活方便,無須移動大批資料,只需修改...
鍊錶之單鏈表
上週給前端的小夥伴們進行了講課,想著總結一下,但是直到推到現在,我才開始。上週講課的內容是es6和鍊錶。我大致把鍊錶的內容總結一下,也算是個回顧。一 初始鍊錶 鍊錶定義 使用一組任意的儲存單元儲存線性表的資料元素 可連續,也可是不連續 它是一種順序儲存。也就是說,鍊錶是線性結構,各個元素的儲存位置都...
鍊錶(LinkList) 單鏈表
一 鍊錶的基本概念 鍊錶是一種物理上不連續 非順序的儲存結構,資料元素之間通過指標關聯在一起。鍊錶的特點 1 空間開銷大 物理空間不連續 2 可以動態新增新的節點 3 查詢元素只能按順序查詢 二 單向鍊錶圖示 節點 class node 鍊錶 class linklist linklist void...