回覆列表
  • 1 # ftirm4273

    棧(Stack)是僅限制在表的一端進行插入和刪除運算的線性表,稱插入、刪除這一端為棧頂,另一端稱為棧底。表中無元素時為空棧。棧 的修改是按後進先出的原則進行的,我們又稱棧為LIFO表(Last In First Out)。通常棧有順序棧和鏈棧兩種儲存結構。 棧的基本運算有六種: ·構造空棧:InitStack(S) ·判棧空: StackEmpty(S) ·判棧滿: StackFull(S) ·進棧: Push(S,x) ·退棧: Pop(S) ·取棧頂元素:StackTop(S) 在順序棧中有"上溢"和"下溢"的現象。 ·"上溢"是棧頂指標指出棧的外面是出錯狀態。 ·"下溢"可以表示棧為空棧,因此用來作為控制轉移的條件。 順序棧中的基本操作有六種:·構造空棧·判棧空·判棧滿·進棧·退棧·取棧頂元素 鏈棧則沒有上溢的限制,因此進棧不要判棧滿。鏈棧不需要在頭部附加頭結點,只要有連結串列的頭指標就可以了。 鏈棧中的基本操作有五種:·構造空棧·判棧空·進棧·退棧·取棧頂元素 佇列(Queue)是一種運算受限的線性表,插入在表的一端進行,而刪除在表的另一端進行,允許刪除的一端稱為隊頭(front),允許插入的 一端稱為隊尾(rear) ,佇列的操作原則是先進先出的,又稱作FIFO表(First In First Out) 。佇列也有順序儲存和鏈式儲存兩種儲存結 構。 佇列的基本運算有六種: ·置空隊:InitQueue(Q) ·判隊空:QueueEmpty(Q) ·判隊滿:QueueFull(Q) ·入隊:EnQueue(Q,x) ·出隊:DeQueue(Q) ·取隊頭元素:QueueFront(Q) 順序佇列的"假上溢"現象:由於頭尾指標不斷前移,超出向量空間。這時整個向量空間及佇列是空的卻產生了"上溢"現象。 為了克服"假上溢"現象引入迴圈向量的概念,是把向量空間形成一個頭尾相接的環形,這時佇列稱迴圈佇列。 判定迴圈佇列是空還是滿,方法有三種: ·一種是另設一個布林變數來判斷; ·第二種是少用一個元素空間,入隊時先測試((rear+1)%m = front)? 滿:空; ·第三種就是用一個計數器記錄佇列中的元素的總數。 佇列的鏈式儲存結構稱為鏈佇列,一個鏈佇列就是一個操作受限的單鏈表。為了便於在表尾進行插入(入隊)的操作,在表尾增加一個尾指 針,一個鏈佇列就由一個頭指標和一個尾指標唯一地確定。鏈佇列不存在隊滿和上溢的問題。在鏈佇列的出隊演算法中,要注意當原隊中只 有一個結點時,出隊後要同進修改頭尾指標並使佇列變空。

  • 中秋節和大豐收的關聯?
  • 雞蛋餅怎麼做才不散架?