1. 棧空條件:s.top == -1;棧滿:s.top == maxsize – 1; 棧長:s.top + 1;
以上當然是順序棧的情況。
或許之前儲存的元素仍然在棧中,但top指標已經指向了新的棧頂,也就起到了刪除的作用。
進棧操作:指標先加1,再入棧。 s.data[++s.top] = x;
出棧操作:先出棧,指標再減1。 x=s.data[s.top--];
注:上述是棧頂指標指向的就是棧頂元素的情況,若指標初始化為s.top=0,則入棧操作變為s.data[s.top++] = x; 出棧操作變為x=s.data[--s.top]。
共享棧,僅當兩個棧頂指標相鄰(top1 – top0 = 1)時,棧滿。
當不帶頭結點時,鏈棧的頭指標指向棧頂元素。
出棧序列的個數,卡特蘭數h(n)=c(2n,n)/(n+1)。
課後題易錯:
採用非遞迴方式重寫遞迴程式時必須使用棧。
錯誤,反例:計算斐波拉契數列迭代實現只需要乙個迴圈即可實現。
函式呼叫時,系統要用棧儲存必要的資訊。
1. 隊頭(front)允許刪除的一端,隊尾(rear)允許插入的一端。
2. 佇列的順序儲存存在「假溢位」問題。無法用q.rear == maxsize判斷佇列是否為滿。
3. 迴圈佇列:
實現方法:
1.設定識別符號(此時隊空q.size==0,q.size == maxsize) 2.犧牲乙個單元
q.front = q.rear = 0;初始:
入隊:q.rear = (q.rear + 1) % maxsize;
出隊:q.front = (q.front + 1) % maxsize;
隊滿:(q.rear + 1)%maxsize = q.front;
隊空:q.front = q.rear;
佇列中元素個數:(q.rear – q.front + maxsize)% maxsize;
隊空:q.front == q.rear
5. 雙端佇列:
輸出受限:允許在一端進入插入和刪除,另一端只能插入的雙端佇列。
輸入受限:允許在一端進行插入和刪除,另一端只能刪除的雙端佇列。
1. 後續表示式中已考慮了運算子的優先順序,沒有括號。
2. 通過字尾表示式求值:如果是運算元,入棧;如果是運算子,從棧中退出兩個操作符y和x,形成運算指令xy,再將運算結果入棧。
3. 中綴轉字尾的手算方法:將兩個直接運算元用括號擴起來,再將操作符提出到括號後,最後再去掉括號。例:((a*(b+c))-d)就寫成了abc+*d-;
4. 將遞迴演算法轉換為非遞迴演算法,通常需要借助棧來實現這種轉換。
5. 佇列在計算機系統中的應用,第乙個方面是解決主機與外部裝置之間速度不匹配的問題,第二個方面是解決由多使用者引起的資源競爭問題。
課後題易錯:
當執行函式時,其區域性變數的儲存一般採用(棧結構)進行儲存。
1. 陣列是n(n>=1)個相同型別的資料元素構成的有限序列,每個資料元素稱為乙個陣列元素。
2. 陣列是線性表的推廣。一維陣列可以看做是乙個線性表;二維陣列可以看做是元素是線性表的線性表。
3.(矩陣)壓縮儲存:指為多個值相同的元素只分配乙個儲存空間,對零元素不分配儲存空間。其目的是為了節省儲存空間。
4. 對稀疏矩陣進行壓縮儲存,常用的兩種方法是(三元組和十字鍊錶)。
5. 三元組(行標,列標,值),稀疏矩陣壓縮儲存後便失去了隨機訪問特性。
6. 廣義表
廣義表的長度:為表中最上層元素的個數。
廣義表的深度:為表中括號的最大層數。
表頭和表尾:當廣義表非空時,第乙個元素為廣義表的表頭,其餘元素組成的表是廣義表的表尾。
頭尾鍊錶儲存結構:原子結點有2個域:標記域和資料域、廣義表結點有3個域:標記域、頭指標域與尾指標域(其中標記域用於區分當前結點是原子(用0表示)還是廣義表(用1表示),頭指標域指向原子或者廣義表結點,尾指標域為空或者指向本層的下乙個廣義表結點)。
資料結構複習總結 棧和佇列
二 佇列 一般設初值為top1 1 棧空 top2 n 棧空 當且僅當top2 top1 1時共享棧滿 即兩個棧頂指標相鄰 設計演算法判斷單鏈表 字元型data域 的全部n個字元是否中心對稱。ex xyx,xyyx 思路 利用棧的先進後出的特點,將鍊錶前一半元素依次進棧,然後將棧中元素出棧,與鍊錶的...
資料結構 棧和佇列
棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...
資料結構 棧和佇列
本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...