資料結構之線性表線性表:零個或多個資料元素的有限序列。資料結構之鍊錶
資料結構之串
資料結構之圖
資料結構之排序演算法
屬性:第乙個元素沒有直接前驅元素和最後乙個元素沒有直接後繼元素,其他每個元素有且僅有乙個直接前驅和直接後繼元素。
基本操作:建立、增刪查改。
優點:隨機訪問結構,查改操作的時間複雜度為o(1)。
缺點:增刪操作的時間複雜度為o(n)
注意:陣列儲存線性表,線性表的長度小於等於陣列的長度。
1、單鏈表
結點(node):資料域和指標域
遍歷核心思想:指標後移
struct listnode
;listnode* p;
while(p !=
null)
優點:頻繁的插入或刪除資料,時間複雜度為o(1)。
1、遍歷查詢第i個結點,時間複雜度為o(n);
2、插入或刪除結點,時間複雜度為o(1)。
2、靜態鍊錶:陣列描述的鍊錶,游標代替指標。
優點:插入刪除方便。
缺點:表長難以確定,不能隨機訪問。
3、迴圈鍊錶:尾結點的指標指向頭結點,形成首尾相連的單鏈表,簡稱迴圈鍊錶。
優點:從任意乙個結點訪問所有結點。
【note】尾結點訪問頻繁,可以使用帶尾指標的迴圈鍊錶。
4、雙向鍊錶:
增加了prior指標,犧牲空間,降低時間複雜度。
優點:正反遍歷的時間複雜度為o(1)
【note】:插入和刪除操作順序1、新結點的前驅和後繼,2、後結點前驅,3、前結點的後繼
棧:限定僅在表尾進行插入和刪除操作的線性表
操作:入棧push()和出棧pop(),時間複雜度為o(1)
出棧次序是多變的,中間過程出棧。
缺點:事先確定儲存空間大小。
1、順序棧
棧底:陣列下標為0
#define maxsize 1024
struct stack
兩棧共享空間:兩個棧的空間需求此消彼長。
2、鏈棧
棧空:頭指標為空
不存在棧滿的情況
//鍊錶
空間變化可控使用順序棧,大小變化使用鏈棧。
3、遞迴
遞迴:函式直接或間接呼叫自己的函式
note:遞迴出口條件,避免無窮遞迴。
缺點:大量遞迴呼叫會建立函式副本,耗費大量的時間和空間。
遞迴的前行過程,會將每一層函式呼叫狀態入棧;遞迴回退過程,會逐步出棧恢復每一層函式呼叫狀態。
3.1、斐波那契數列(fibonacci)
f (n
)=0,當n = 0 \\ 1,當n = 1 \\ f(n-1) +f(n-2) ,當n>1 \end \right.
f(n)=⎩
⎪⎨⎪⎧
0,當
n=01
,當n=
1f(n
−1)+
f(n−
2),當
n>1
int
fbi(
)return
fbi(n -1)
+f(n -2)
;}
3.2、四則運算
中綴表示式轉化為字尾表示式,棧用來進出符號
字尾表示式運算出結果,棧用來進出數字和運算結果
作業系統或客服系統都用了佇列的資料結構。
1、順序佇列:
問題:1、出隊時間複雜度為o(n);
2、假溢位問題
3、尾指標指向不明問題
改進:迴圈佇列
隊空條件:
front == rear
隊滿條件:
(rear +1)
%queuesize = front
//隊長計算公式
(rear - front + queuesize )
%queuesize
2、鏈佇列進隊和出隊的時間複雜度為o(1) mysql 線性表 資料結構之線性表
概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...
資料結構之線性表
從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...
資料結構之線性表
線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...