棧的結構示意圖:
假設棧中的元素如下所示:,若設定作為棧底元素,與之相對的則作為棧頂的元素,是最後乙個被壓入棧的,同時也會是第乙個出棧的。元素輸入棧的順序與輸出棧的順序直接相反。
棧也是一種特殊的線性表,但不同的是,棧的操作與傳統的線性表不同。傳統的線性表可以完成隨機位置訪問,而棧的結構決定了它進行操作的特點:僅僅在表尾進行插入或刪除操作(後進先出)。表尾端稱作棧頂,而與之相對的,表頭端稱作棧底。可以將棧的結構與子彈彈夾進行模擬,後壓入的子彈先被發射,正如棧的後進先出特點一般。
棧的順序表示基本結構如下,要求利用一組位址連續的記憶體單元來儲存資訊,元素的資料按順序由棧底依次儲存到棧頂,再由棧頂開始依次向下取出或新增元素 。在棧的順序表示之中,先定義棧的類名為sqstack,需要設定名為base與top的兩個指標,分別指示棧底的記憶體與棧頂的記憶體,同時定義int型別的變數用於設定棧的記憶體。
此文段參考博主:
棧在解決算術解析表示式時常用,使用方法是:將算術解析表示式(中綴表示式)轉換成字尾表示式,然後再使用棧中進行求值。這樣能正確體現出算術解析表示式中各符號的優先順序關係。
下面是實現**:
#include#include#include#include#define ok 1
#define error 0
#define overflow -2
#define maxsize 100
typedef int status;
typedef char selemtype;
typedef struct
sqstack;
status initstack(sqstack &s)//初始化
status push(sqstack &s,selemtype e)//入棧
status pop(sqstack &s,selemtype &e)//出棧
selemtype gettop(sqstack s)//取棧頂元素
int in(selemtype e)//判斷讀入字元是否為運算子
selemtype precede(selemtype a,selemtype b)//比較運算子的優先順序
else if(a=='*'||a=='/')
else if(a=='(')
else if(a==')')
else if(a=='#')
return f;
}selemtype operate(selemtype a,selemtype theta,selemtype b)//運算
int evaluateexpression()
else
}} return gettop(opnd)-'0';
}int main()
**參考博主:
注意:因為是簡單實踐,所以**邏輯已經簡化,比如只能對個位數的加減乘除進行解析、沒有設異常處理等
河北大學資料結構大作業
include include include include define max ver num 50 define ok 1 define false 0 define error 1 define a 1000 define true 1 typedef struct arcnode 設定邊...
資料結構作業 鏈棧的實現
鏈棧,即為使用鏈式儲存的棧。本程式使用void指標指向不同型別的鏈棧頭結點,使用的時候強制轉換即可。用template實現了儲存不同資料型別。include include include include using namespace std const int maxn 9 struct sta...
資料結構大作業 並查集 檢查網路
11 並查集 檢查網路 問題描述 給定乙個計算機網路以及機器間的雙向連線列表,每一條連線允許兩端的計算機進行直接的檔案傳輸,其他計算機間若存在一條連通路徑,也可以進行間接的檔案傳輸。請寫出程式判斷 任意指定兩台計算機,它們之間是否可以進行檔案傳輸?輸入要求 輸入若干測試資料組成。對於每一組測試,第1...