數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)


插入操作

刪除操作 有一定要注意第一個(gè)while 里面的條件是 p->next 不能是 p 若為p 會(huì)出現(xiàn)引用空指針的情況(比如說(shuō) 該鏈表有6個(gè)元素 你要?jiǎng)h除第7個(gè) )

j 與 p 的位置一一對(duì)應(yīng)

!p用來(lái)排除 i 過(guò)大的情況
j > i用來(lái)排除 i 為0 -1 等非法情況

頭插法

尾插法
循環(huán)鏈表


雙向鏈表雙向循環(huán)鏈表


插入操作

鏈表實(shí)現(xiàn)有序表的合并

多項(xiàng)式相加實(shí)現(xiàn)
需要人為輸入各項(xiàng)的系數(shù)與指數(shù)但按排序輸入
程序可自動(dòng)排序
- 建立一個(gè)鏈表
- 找到第一個(gè)比輸入值的指數(shù)小的節(jié)點(diǎn) 需要兩個(gè)指針pre p while(p && s->指數(shù) > p->指數(shù)) pre = p , p = p->next;
- 插入

指數(shù)相等的情況
- 系數(shù)相加 判斷是否為0
若是0: 兩指針都向后移一位 并刪除空間
若不為0: 系數(shù)相加至其中一個(gè)鏈表中 另一個(gè)鏈表的對(duì)應(yīng)節(jié)點(diǎn)刪除 兩指針都移向下一位
- 不相等的情況參考上文有序鏈表的合并。
離散化算法參考:https://www.acwing.com/activity/content/code/content/5328352/
棧



順序棧
清空棧 : 空間還占用
銷毀棧 : 空間也刪除掉
入棧 :判斷是否棧滿 (top - base 是否為0)
壓入棧 top指針上移一位
鏈棧 :
入棧

出棧

遞歸 :







隊(duì)列

循環(huán)隊(duì)列
核心是 有新元素入棧時(shí) 尾指針+1 % maxsize
如何判斷循環(huán)隊(duì)列 空 還是 滿
由于空和滿時(shí)頭指針和尾指針都一樣 需要先出另外的辦法:

少用一個(gè)元素空間:

隊(duì)列的初始化


循環(huán)隊(duì)列求隊(duì)列的長(zhǎng)度 :

循環(huán)隊(duì)列入隊(duì):
- 判斷是否隊(duì)滿;
- 新元素加入隊(duì)尾;
- 尾指針+1;

循環(huán)隊(duì)列出隊(duì):

隊(duì)列的鏈?zhǔn)奖硎?/p>

初始化:

銷毀

入隊(duì)

出隊(duì)
須特判隊(duì)列中只有一個(gè)元素的情況
因?yàn)檫@時(shí)尾指針也要修改
