1、棧的邏輯結構:棧
是限定僅在表尾插入和刪除操作的線性表。允許插入和刪除的一端成為棧頂,另一端為棧底,不含任何資料元素的棧稱為空棧。(後進先出)
2、棧的順序儲存結構及實現
(1)棧的初始化:初始化乙個空棧只需將棧頂指標top置為-1.
(2)入棧操作:在棧中插入乙個元素x只需將棧頂指標top加1,然後在top指向的位置填入元素x。
(3)出棧操作:刪除棧頂元素只需取出棧頂元素,然後將棧頂指標top-1.
(4)取棧頂元素:取棧頂元素只是將top指向的棧頂元素取出,並不修改棧頂指標。、
(5)判空操作:順序棧的判空操作只需判斷top==-1是否成立,如果成立,則棧為空,返回1;如果不成立,則棧非空,返回0.
3、棧的連線儲存結構及實現
(1)建構函式:建構函式的作用是初始化乙個空鏈棧,由於鏈棧不帶頭結點,因此只需將棧頂指標top置空。
(2)入棧操作:鏈棧的插入操作只需處理棧頂即第乙個位置的情況,而無需考慮其他位置的情況。
(3)出棧操作:鏈棧的刪除操作只需處理棧頂即第乙個位置的情況,而無需考慮其他位置的情況。
(4)取棧頂元素:取棧頂元素只需返回棧頂指標top所指結點的資料域。
(5)判空操作:鏈棧的判空操作只需判斷top==null是否成立,如果成立,則棧為空,返回1;如果不成立,則棧非空,返回0.
(6)析構函式:鏈棧的析構函式需要將鏈棧中所有的儲存空間釋放,演算法與單鏈錶類的析構函式類似。
4、迴圈佇列和鏈佇列的比較
1、佇列的邏輯結構:是只允許在一端進行插入操作,在另一端進行刪除操作的線性表。允許插入的一端是隊尾,允許刪除的一端是隊頭。
2、佇列的順序儲存結構及實現——迴圈佇列
(1)建構函式:建構函式的作用是初始化乙個空的迴圈佇列,只需將隊頭指標和隊尾指標同時指向陣列的某一位置,一般是陣列的高階,即rear=front=queue-1.
(2)入隊操作:迴圈佇列的入隊操作只需將隊尾指標rear在迴圈意義下加1,然後將待插元素x插入隊尾位置。
(3)出對操作:迴圈佇列的出對操作只需將對頭指標front在迴圈意義下加1,然後讀取並返回隊頭元素。
(4)讀取隊頭元素:讀取隊頭元素與出對操作類似,唯一的區別是不改變隊頭指標。
(5)判空操作:迴圈佇列的判空操作只需判斷front==rear是否成立。如果成立,則隊列為空,返回1;如果不成立,則佇列非空,返回0.
3、佇列的連線儲存結構及實現——鏈佇列
(1)建構函式:建構函式的作用是初始化乙個空的鏈佇列,只需申請乙個頭結點,然後讓隊頭指標和隊尾指標均指向頭結點。
(2)入隊操作:鏈佇列的插入操作只考慮在鍊錶的尾部進行,由於鏈佇列帶頭結點,空佇列和非空佇列的入隊操作語句一致。
(3)出對操作:鏈佇列的刪除操作只考慮在鏈佇列的頭部進行,需要注意佇列長度等於1的特殊情況。
(4)取隊頭元素:取鏈佇列的隊頭元素只需返回第乙個元素節點的資料域,即返回first->next->data。
(5)判空操作:鏈佇列的判空操作只需判斷front==rear是否成立。如果成立,則隊列為空,返回1;如果不成立,則佇列非空,返回0.
(6)析構函式:鏈佇列的析構函式需要將鏈佇列中所有結點的儲存空間釋放,演算法與單鏈錶類的析構函式略。
4、迴圈佇列和鏈佇列的比較
實現迴圈佇列和鏈佇列的基本操作的演算法都需要常數時間o(1)。迴圈佇列和鏈佇列的空間效能的比較與順序棧和鏈棧的空間效能的比較類似,只是迴圈列表不能像順序列表那樣共享空間,通常不能在乙個陣列中儲存兩個迴圈佇列。
棧和佇列 筆記
棧先進後出的特性,也就是對於的插入和刪除操作都是在棧頂進行的 佇列先進先出,從隊尾插入,對頭彈出 一般情況下棧用順序表來實現,因為棧的操作需要棧頂進行彈出操作,此時需要將棧頂指標指向上乙個元素,如果用鍊錶來做,則需要從頭開始查詢 單鏈表 使用迴圈鍊錶也需要將指標迴圈一圈,此時的時間複雜度都是o n ...
棧和佇列筆記2
佇列也稱為堆疊,是一種先進後出,刪除和插入都在棧頂操作的線性表 棧的特性 先進後出,後進先出 最先放入棧的內容最後被拿出來,最後放入棧的內容最先被拿出來 解密回文 include include intmain 判斷字串的長度是奇數還是偶數,並找到需要進行字元匹配的起始下標 if len 2 0 e...
學習筆記(2) 棧和佇列
棧和佇列都是線性結構,是特殊的線性表。棧 僅在表尾進行插入或刪除元素的操作。表尾稱為棧頂,表頭稱為棧底。不含元素的空表為空棧。又稱為 先進後出 線性表。棧有兩種儲存結構 順序儲存和鏈式儲存 與線性表類似 設定top指標指向棧頂位置,base指標指向棧底位置,當top base 時,棧為空棧。使用c語...