7 棧的定義及實現

2021-07-11 19:40:31 字數 1183 閱讀 7364

一:棧的定義

棧是一種特殊的線性表

棧通常有兩種實現方式:順序結構實現和鏈式結構實現

性質:後進先出(lifo)--last in first out

二:棧的應用實戰--編譯器符號成對檢測

當需要檢測成對出現但又互不相鄰的事物時,使用棧的「後進先出」特性

演算法思路

從第乙個字元開始掃瞄

當遇見普通字元時忽略,當遇見左符號時壓入棧中

當遇見右符號時從棧中彈出棧頂符號

進行匹配

匹配成功,繼續讀入下乙個字元

匹配失敗,立即停止,並報錯

結束成功:所有字元掃瞄完畢,且棧為空

失敗:匹配失敗或所有字元掃瞄完畢但棧非空

演算法框架

三:棧的應用實戰--計算器程式的實現

中綴表示式和字尾表示式

中綴表示式符合人們的思維習慣

字尾表示式符合計算機的運算方式

5+3  ——>53+

1+2*3 ——>123*+

9+(3-1)*5+8/2——>931-5*+82/+

中綴表示式轉字尾表示式

對於數字:直接輸出

對於符號:

左括號:進棧

符號:與棧頂符號進行優先順序比較

棧頂符號優先順序低:進棧

棧頂符號優先順序不低:將棧中符號全部彈出並輸出,之後進棧

右括號:將棧頂符號彈出並輸出,直到匹配左括號

遍歷結束:將棧中所有符號彈出並輸出

演算法框架

字尾表示式的計算

對於數字:進棧

對於符號:

從棧中彈出右運算元

從棧中彈出左運算元

根據符號進行運算

將運算結果壓入棧中

遍歷結束:棧中唯一數字為計算結果

演算法框架

棧的定義及基本演算法實現

棧定義 是一種只能在一端進行插入或刪除操作的線性表 1 允許 進行插入 刪除操作的一端稱為 棧 頂 2 表的另一端稱為 棧底 3 當棧中沒有資料元素時 稱為 空棧 4 棧的插入操作通常稱為 進棧 或 入 棧 5 棧的刪除操作通常稱為 退棧 或 出棧 例如 死胡同就是乙個棧 洗1疊碗時的取放 棧據有先...

棧的定義及基本操作

1 定義 棧是僅限定在表的一端操作的線性表 2 性質 先進後出 後進先出 3 棧的儲存方式 順序儲存和鏈式儲存 順序棧的型別定義 typedef struct stack 棧的壓入操作 1 首先判斷是否棧滿,若棧滿,則輸出 棧滿溢位 2 先指標top 棧元素值 push s,e return s 棧...

棧的實現及應用

1.棧定義 棧又稱堆疊,是一種運算受限的線性表,限制是僅僅允許在表的另外一端進行插入和刪除運算。2.特點 後進先出 cpu快取利用率相對較高 不允許隨意訪問 3.實現方式 棧有兩種實現方式,一種是順序儲存,和陣列類似。一種是鏈式儲存,和單鏈表類似。這是在2013編譯器下 棧裡面有以下幾種函式 voi...