資料結構與演算法(鍊錶 棧 佇列)

2021-09-27 02:58:59 字數 2359 閱讀 3728

資料結構與演算法

演算法的5個基本特性:輸入、輸出、有窮性、確定性和可行性

演算法的時間複雜度 t=o(f(n))

空間複雜度 s(n)=o(f(n)) 儲存空間的實現

線性表:

(list)零個或多個資料元素的有限序列

順序儲存結構:連續的儲存單元

#define maxsize 20

typedef int elemtype;

typedef struct

sqlist;

鏈式儲存結構

單鏈表靜態鍊錶

#define maxsize 1000

typedef struct

component,staticlinklist[maxsize];

陣列第乙個元素的cur用來存放備用鍊錶的第乙個結點下標

最後乙個元素的cur用來存放第乙個插入元素的下標,相當於頭結點

迴圈鍊錶

有頭指標的

p->next 不等於頭結點,則迴圈未結束

不用頭指標的,用終端結點的尾指標表示迴圈鍊錶

rear->next->next即為開始結點

rear->next是儲存頭結點的結點

雙向鍊錶

typedef struct dulnode

dulnode, *dulinklist;

棧與佇列

棧是限定僅在表尾(棧頂top)進行查尋和刪除操作的線性表。先進後出

佇列是只允許在一端進行插入操作、而在另一端進行刪除操作的線性表。先進先出

棧頂top

棧底bottom

last in first out

簡稱lifo

棧的順序儲存:

棧的結構定義

typedef int elemtype;

typedef struct

sqstack;

兩棧共享空間結構(兩個相同資料型別的棧)

typedef struct

sqdoublestack;

當top1+1==top;時為棧滿

我們還需要乙個判斷是棧1還是棧2的棧號引數stacknumber。

棧的鏈式儲存:(鏈棧)

鏈棧的結構

棧的應用–遞迴

斐波那契數列

int fbi(int i)

四則運算表示式求值

中綴表示式轉字尾表示式

規則:從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即成為字尾表示式的一部分;

若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號則棧頂元素依次出棧並輸出,並將當前符號進棧

一直到輸出字尾表示式為止。

佇列 first in first out 簡稱fifo

允許插入的一端為隊尾,允許刪除的一端為隊頭front

rear指標指向隊尾元素的下乙個位置)

front指標指向隊頭元素

當front= =rear時為空佇列

迴圈佇列

如何判斷空、滿

設定乙個標誌變數flag

當front= =rear&&flag= =0時隊列為空

當front= =rear&&flag= =1時隊列為滿

方法二保留最後乙個空間

當front = =rear ,為空

當(rear+1)%queuesize = = front ,為滿

計算佇列長隊公式:

(rear - front +queuesize)%queuesize

迴圈佇列的順序儲存結構

typedef struct

sqqueue;

初始化initqueue

長度 queuelength

入隊

status enqueue (sqqueue *q,elemtype e)

//出隊

status dequeue (sqqueue *q,elemtype *e)

以上為順序儲存

佇列的鏈式儲存結構

typedef int elemtype;

//結點結構

typedef struct qnode

qnode,*queueptr;

//佇列鍊錶結構

typedef struct

linkqueue;

串(p149)

kmp模式匹配演算法(p159)

樹(tree)

資料結構 棧 佇列 鍊錶

棧 1,棧只能從表的一端訪問資料,另一端是封閉的。2,在棧中,無論是存資料還是取資料,都必須遵循 先進後出 的原則,即最先進棧的元素最後出棧。基於 棧結構的特點,在實際應用中,通常只會對棧執行以下兩種操作 向棧中新增元素,此過程被稱為 進棧 入棧或壓棧 從棧中提取出指定元素,此過程被稱為 出棧 或彈...

資料結構 棧 佇列 鍊錶

棧 1,棧只能從表的一端訪問資料,另一端是封閉的。2,在棧中,無論是存資料還是取資料,都必須遵循 先進後出 的原則,即最先進棧的元素最後出棧。基於 棧結構的特點,在實際應用中,通常只會對棧執行以下兩種操作 向棧中新增元素,此過程被稱為 進棧 入棧或壓棧 從棧中提取出指定元素,此過程被稱為 出棧 或彈...

資料結構與演算法之陣列 鍊錶 佇列 棧

一 陣列 陣列是乙個儲存元素的線性集合,它使用一塊連續的記憶體空間儲存資料,儲存的資料的個數在分配記憶體的時候就是確定的。訪問陣列中第 n 個元素的時間花費是o 1 在陣列中查詢乙個指定的元素則是o n 向陣列中插入或刪除元素時,最好的情況是在陣列的末尾進行操作,時間複雜度是o 1 最壞情況是插入或...