山東中醫藥大學電腦科學與技術2班王鑫童第3章筆記

2021-06-26 16:59:26 字數 1278 閱讀 4415

棧與佇列

棧:限定僅在表的一端進行插入和刪除操作的線性表.

允許插入和刪除的一端稱為棧頂,另一端稱為棧底。

空棧:不含任何資料元素的棧。

注意:棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。

棧中元素具有相同型別及後進先出特性,相鄰元素具有前驅和後繼關係.

兩棧共享空間:使用乙個陣列來儲存兩個棧,讓乙個棧的棧底為該陣列的始端,另乙個棧的棧底為該陣列的末端,兩個棧從各自的端點向中間延伸。

兩棧共享空間的實現——插入

操作介面:void push(int i, datatype x) ;

1. 如果棧滿,則丟擲上溢異常;

2. 判斷是插在棧1還是棧2;

2.1 若在棧1插入,則

2.1.1 top1加1;

2.1.2 在top1處填入x;

2.2 若在棧2插入,則

2.2.1 top2減1;

2.2.2 在top2處填入x;

兩棧共享空間的實現——刪除

操作介面:datatype pop(int i) ;

1. 若是在棧1刪除,則

1.1 若棧1為空棧,丟擲下溢異常;

1.2 刪除並返回棧1的棧頂元素;

2. 若是在棧2刪除,則

2.1 若棧2為空棧,丟擲下溢異常;

2.2 刪除並返回棧2的棧頂元素;

順序棧:有元素個數的限制和空間浪費的問題。

鏈棧:沒有棧滿的問題,只有當記憶體沒有可用空間時才會出現棧滿,但是每個元素都需要乙個指標域,從而產生了結構性開銷。

總之,當棧的使用過程中元素個數變化較大時,用鏈棧是適宜的,反之,應該採用順序棧。

假溢位:當元素被插入到陣列中下標最大的位置上之後,佇列的空間就用盡了,儘管此時陣列的低端還有空閒空間,這種現象叫做假溢位。

如何確定不同的隊空、隊滿的判定條件?

為什麼要將隊空和隊滿的判定條件分開?

方法一:附設乙個儲存佇列中元素個數的變數num,當num=0時隊空,當num=queuesize時為隊滿;

方法二:修改隊滿條件,浪費乙個元素空間,隊滿時陣列中只有乙個空閒單元;

方法三:設定標誌flag,當front=rear且flag=0時為隊空,當front=rear且flag=1時為隊滿。

迴圈佇列和鏈佇列的基本操作都需要常數時間o

迴圈佇列:必須預先確定乙個固定的長度,所以有儲存元素個數的限制和空間浪費的問題。

鏈佇列:沒有佇列滿的問題,只有當記憶體沒有可用空間時才會出現佇列滿,但是每個元素都需要乙個指標域,從而產生了結構性開銷。

山東中醫藥大學電腦科學與技術2班王鑫童第4章筆記

第4章 字串和多維陣列 字串。在程式語言中大都有串變數的概念,而且實現了基本的串操作,本章重點討論串的儲存結構及模式匹配演算法。陣列。在程式語言中大都提供了陣列作為構造資料型別,本章重點討論陣列以及特殊矩陣的儲存與定址。串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的...

山東中醫藥大學電腦科學與技術2班王鑫童第7章筆記

在表中的位置 若整個表檢測完仍未找到與給定值相等的關鍵碼,則查詢失敗,給出失敗資訊。改進的順序查詢 基本思想 設定 哨兵 哨兵就是待查值,將它放在查詢方向的盡頭處,免去了在查詢過程中每一次比較後都要判斷查詢位置是否越界,從而提高查詢速度。順序查詢的缺點平均查詢長度較大,特別是當待查詢集合中元素較多時...

山東中醫藥大學資料結構第三章棧與佇列

3.1 棧 3.1.1棧的邏輯結構 1.棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何元素的棧稱為空棧。注意 棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。2.棧的抽象資料型別定義 adt stack da...