Linux大作業 「棧」資料結構的理解和使用

2021-09-22 12:25:36 字數 1522 閱讀 3689

棧的結構示意圖:

假設棧中的元素如下所示:,若設定作為棧底元素,與之相對的則作為棧頂的元素,是最後乙個被壓入棧的,同時也會是第乙個出棧的。元素輸入棧的順序與輸出棧的順序直接相反。

棧也是一種特殊的線性表,但不同的是,棧的操作與傳統的線性表不同。傳統的線性表可以完成隨機位置訪問,而棧的結構決定了它進行操作的特點:僅僅在表尾進行插入或刪除操作(後進先出)。表尾端稱作棧頂,而與之相對的,表頭端稱作棧底。可以將棧的結構與子彈彈夾進行模擬,後壓入的子彈先被發射,正如棧的後進先出特點一般。

棧的順序表示基本結構如下,要求利用一組位址連續的記憶體單元來儲存資訊,元素的資料按順序由棧底依次儲存到棧頂,再由棧頂開始依次向下取出或新增元素 。在棧的順序表示之中,先定義棧的類名為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...