大話資料結構讀書筆記(四) 棧和佇列

2021-07-27 03:17:12 字數 2668 閱讀 9153

四、棧和佇列

棧:是限定僅在表尾進行插入和刪除操作的線性表。把允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。(線性表就有線性表的性質)

棧的插入操作,叫做進棧,也稱壓棧、入棧。

棧的刪除操作,叫做出棧,也稱彈棧。(通項計算c(2n,n)/(n+1)。

棧頂:top無元素是-1,(出棧和進棧不涉及迴圈時間複雜度o(1))。兩棧共享空間:top1+1==top2棧滿。

棧得鏈式儲存:鏈棧基本不存在棧滿。

棧得應用:

1、遞迴(斐波那契數列),直接呼叫自己或者通過語句間接呼叫自己的函式。2、四則運算表示式求值(逆波蘭:一種不需要括號的字尾表示式)表示式:9 3 1 – 3 * + 10 2 / +。規則:從左到右遍歷表示式中的每個數字和符號, 遇到是數字就進棧, 遇到事符號就就將棧頂兩個數字取出進行計算, 運算結果進棧, 一直到最終獲得結果。

中綴表示式轉字尾表示式:中綴表示式「9+(3-1)*3+10/2」轉化為字尾表示式「9 3 1 3 – 3 * + 10 2 / +」 規則:從左到右遍歷表示式的每個數字和符號,若是數字就輸出,就成為字尾表示式的一部分;若是符號,則判斷與其棧頂符號的優先順序,是右括號或者優先順序低於棧頂元素則棧頂元素以此出棧並輸出,並將當前符號進棧,一直到最終輸出字尾表示式。

佇列:只允許在一段進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的線性表,簡稱fifo。允許插入的一段陳為隊尾,允許刪除的一段稱為對頭。

迴圈佇列:我們把佇列頭尾相接的順序儲存結構稱為迴圈佇列。單鏈佇列時,當隊列為空時,front等於rear,現在迴圈佇列當佇列滿時,也是front等於rear,怎麼判斷為空還是滿,加標誌位。若佇列的最大尺寸為queuesize,那麼佇列滿的條件是(rear + 1) % queuesize == front。

佇列的鏈式儲存:佇列的鏈式儲存結構其實就是線性表的單鏈表,只不過它只能頭出尾進,我們把它簡稱為佇列。

棧得基本操作:

package day01to05;

inte***ce statck

public class stack implements statck

public int getmindex()

private int top;

public stack(int maxsize)

public void clear()

public boolean isempty()

public int length()

// 取棧頂元素的函式

public object peek()

/**

* 進棧操作 要求:時間複雜度是o(1)

* */

public boolean push(object x)

if (top == 0) else if ((integer)x <(integer)peek()&& peek() != null) else if (peek() != null)

stackelem[top++] = x;

return true;

}

/**

* 順序棧的出棧操作 時間複雜度為:o(1)

* */

public object pop() throws exception else

return null;// 若棧空,則返回空值

} /**

* 返回棧中最小的元素,需要乙個輔助棧 要求:時間複雜度是o(1) 解決這道題的思路在於:用空間換時間!

* */

public object min()

@override

/**

* 要求用遞迴的方法,在不浪費空間的情況下,顛倒棧。

* */

public void reversestack(stack s) throws exception

} public void pushstackbuttom(stack s, object t) throws exception else

}

}

佇列的基本操作:

inte***ce que   

//第一種:順序佇列的基本操作的實現

/**

* 本類針對順序佇列

* */

public class quene implements que

public object getq()

@override

public void clear()

@override

public boolean isempty()

@override

public int length()

@override

public object peek()

@override

public void enqueue(object x) throws exception

@override

public object dequeue()

}

大話資料結構(四) 棧和佇列

棧 一種線性表,限定只能在表尾進行插入和刪除的操作。這裡的表尾指的是棧頂,lifo結構。兩棧共享空間的資料結構一般用在兩個棧的空間需求有相反關係時,也就是乙個棧在增長時另乙個棧在縮短的情況,但是前提是兩個棧具有相同的資料型別。迭代和遞迴 迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴必須至少有乙個...

大話資料結構讀書筆記

第一章 資料結構的定義 資料就夠是相互直接存在一種或多種特定關係的資料元素的集合 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 第二章 演算法 1 演算法的特性 輸入 輸出 有窮性 確定性和可行性 2 演算法事假複雜度定義 在進行演算法分析時,語句總的次數t n 第三章1 線性表 定義 零個或多...

大話資料結構 讀書筆記

是相互之間存在一種或多種特定關係的資料元素的集合。說白了就是資料的集合 但是集合裡面的資料之間存在特地的關係 這翻譯得好像沒說一樣 是指資料元素之間的相互關係 指資料的邏輯結構在計算機儲存形式 鏈式儲存結構 是把資料元素存放在任意的儲存單元 這組儲存單元可以是連續的 也可以是不連續的 資料型別指的是...