資料結構 棧和佇列

2021-09-27 07:35:01 字數 1849 閱讀 3410

對於n個不同元素進棧,出棧序列的個數為

1 n+

1c2n

n=1n

+1(2

n)!n

!∗n!

\fracc^_=\frac\frac

n+11​c

2nn​

=n+1

1​n!

∗n!(

2n)!

​也可以使用列舉法解題,時間充裕的情況下可以互相驗證。

利用兩個棧s1和s2來模擬乙個佇列,入棧時將元素輸入s1,由於棧和佇列的輸出順序不一樣,我們發現,連續進棧n個元素再連續出棧n個元素相當於將這個序列逆序,而使用兩個棧完成了兩次逆序則等價於佇列的先進先出。所以出棧的時候需要將s1中的元素全部彈出並壓入s2中,再從s2彈出棧頂元素。判空的條件是s1和s2都為空。還要注意在入隊的時候,如果s1滿,則只有s2為空時才能將s1中的元素全部加入s2中再入棧s1,否則會導致順序錯誤

初始時:q.front=q.rear=0。

隊首指標進1:q.front=(q.front + 1) % maxsize

隊尾指標進1:q.rear=(q.rear + 1) % maxsize

佇列長度:(q.rear+maxsize-q.front)%maxsize

犧牲乙個單元來區分隊空和隊滿,隊滿條件為:(q.rear+1)%maxsize == q.front

型別中增設表示元素個數的資料成員。

類中增設tag成員。進隊時置tag為1,出隊時置tag為0(因為只有入隊操作可能導致隊滿,也只有出隊操作可能導致棧空)。佇列初始時,置tag=0。這樣

從左到右開始掃瞄中綴表示式;

遇到數字時,加入字尾表示式;

遇到運算子時:

還有另外一種手動方法,快速由中綴表示式得到字尾表示式:

按照運算子的優先順序對所有的運算單位加括號。

把運算符號移動到對應的括號後面,把括號去掉,得到字尾表示式。

上面兩種方法的實質是把數字和運算子按順序分別入棧(乙個運算元棧,乙個運算子棧),對於運算子,遇到更高階的運算子時則入棧,否則將比它優先順序低的運算子出棧運算,這裡(被看做優先順序最高的運算子

對於這類題目,不要記憶公式。題目給定的儲存的下標可能從0開始也可能從1開始。除了稀疏矩陣,要注意按行優先儲存還是按列優先儲存

題目會說明儲存上三角矩陣還是下三角矩陣

和對稱矩陣類似,區別是它多了乙個常數項,對應下標為n(n+1)/2(如果下標從1開始),即上(下)三角區域最後乙個元素下標的後乙個。

要注意第一行和最後一行的元素個數為2個,其他行元素個數為2個。

適用於壓縮儲存稀疏矩陣的兩種儲存結構是三元組表和十字鍊錶

設煉表不帶頭結點且所有操作均在表頭進行,則下列最不適合作為鏈棧的是。只有表頭結點指標,沒有表尾指標的單向迴圈鍊錶。插入和刪除乙個結點後,仍需將其變為迴圈單鏈表,因此需要找到其尾結點,時間複雜度為o(n)

棧的經典應用:括號匹配、遞迴、迷宮求解、進製轉換

佇列的經典應用:二叉樹的層次遍歷、緩衝區

使用棧可以模擬遞迴的過程,以此來消除遞迴,但對於單向遞迴和尾遞迴而言,可以使用迭代的方法來消除遞迴。

不帶頭結點的單鏈表儲存佇列,其隊頭指標指向隊頭結點,隊尾指標指向隊尾結點,則在進行出隊時隊頭、隊尾指標都可能要修改。考慮出隊後隊列為空的情況,此時需要將隊尾指標置為null

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...