二 线性表
一. 線性表的幾種形式:
1.線性表是最常用且最簡單的一種數(shù)據(jù)結(jié)構(gòu). 線性表中元素的個數(shù)n定義為線程表的長度,n= 0時稱為空表.
2. 線性表的順序表示指的是用一組地址連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素. 這種順序存儲結(jié)構(gòu)的線性表為順序表.
??? 線性表的特點: 優(yōu)點是:可以隨機(jī)存取的存儲結(jié)構(gòu)
?? 缺點是:插入和刪除時間復(fù)雜度高,主要耗費在移動元素上. 時間復(fù)雜度O(n).內(nèi)存中有許多的內(nèi)存碎片,內(nèi)存碎片都很小,不能,必須開辟新的空間.
???? 數(shù)組
3.線性表的鏈?zhǔn)奖硎竞蛯崿F(xiàn)? [字典,集合]
? 鏈?zhǔn)奖硎且唤M任意的存儲單元存儲線性表的數(shù)據(jù)元素(這組存儲單元可以是連續(xù)的,也可以不是連續(xù)的). 一般叫做線性鏈表或單鏈表.? 時間復(fù)雜度為(n)
?? 概念: 每一個元素叫做節(jié)點,
?????????? 里面存儲數(shù)據(jù)元素的信息叫做數(shù)據(jù)域,
?????????? 存儲直接后繼存儲位置的域叫做指針域.
?????????? 頭指針: 指向鏈表中第一個結(jié)點; 最后一個結(jié)點指針域為空”NULL”
????????? 重點: 線性表的單鏈表的存儲結(jié)構(gòu)是結(jié)構(gòu)體: 數(shù)據(jù)域和指針域[本結(jié)構(gòu)體類型的指針]
4. 循環(huán)鏈表: 另一種鏈?zhǔn)降拇鎯Y(jié)構(gòu)
??? 單循環(huán)鏈表: 表的最后一個結(jié)點的指針域執(zhí)行頭結(jié)點,整個鏈表形成一個環(huán),
??? 雙向鏈表: 一個結(jié)點有兩個指針域,一個指向直接后繼,一個指向直接前繼.
二 棧
棧和隊列是兩種重要的線性結(jié)構(gòu). 是特殊的線性表結(jié)構(gòu),操作收到了限制.
對于棧來說,表尾為棧頂, 表頭為棧尾,不含元素為空棧,
先進(jìn)后出的原則(LIFO)
棧的實際應(yīng)用: 括號匹配的檢驗
棧與遞歸: 棧在程序設(shè)計中實現(xiàn)遞歸:
一個直接調(diào)用自己或者通過一系列的調(diào)用語句間接的調(diào)用自己的函數(shù),叫遞歸函數(shù).
這里主要討論遞歸是如何執(zhí)行的?
當(dāng)一個函數(shù)的運(yùn)行期間調(diào)用另一個函數(shù)時,在運(yùn)行被調(diào)用函數(shù)之前,
系統(tǒng)需要先完成三件事:
(1) 將所有的實在參數(shù),返回地址等信息傳遞給被調(diào)用函數(shù)保存;
(2)為被調(diào)用函數(shù)的局部變量分配存儲區(qū);(3) 將控制轉(zhuǎn)移到被調(diào)用函數(shù)的入口.
?而從被調(diào)用調(diào)用函數(shù)返回調(diào)用函數(shù)之前,系統(tǒng)也完成3件事:
(1) 保存被調(diào)函數(shù)的計算結(jié)果 (2) 釋放被調(diào)函數(shù)的數(shù)據(jù)區(qū) (3)依照被調(diào)函數(shù)保存的返回地址將控制轉(zhuǎn)移到調(diào)用函數(shù);
原理: 函數(shù)之間的信息傳遞和控制轉(zhuǎn)移必須通過棧來實現(xiàn), 程序運(yùn)行的時所需的數(shù)據(jù)空間安排到一個棧中,每當(dāng)調(diào)用一個函數(shù)的時候,就為她在棧頂分配一個存儲區(qū),每當(dāng)從一個函數(shù)退出時,就釋放它的存儲區(qū),則 當(dāng)前正在運(yùn)行的函數(shù)的數(shù)據(jù)區(qū)必須在棧頂. 遞歸函數(shù)也屬于函數(shù)的嵌套調(diào)用,原理也是一樣的,原則:后調(diào)用先返回;
隊列: 是先進(jìn)先出(FIFO)的線性表.允許插入的一端叫做隊尾,允許刪除的一端則稱為對頭; 隊列在程序設(shè)計中也經(jīng)常出現(xiàn),一個最典型的例子就是操作系統(tǒng)中的作業(yè)隊列;
轉(zhuǎn)載于:https://www.cnblogs.com/xiaofei76/p/5496766.html
總結(jié)
- 上一篇: Linux常用服务部署与优化之NFS篇
- 下一篇: 一起来学习android自定义控件3——