資料結構之棧實現

2021-09-22 05:56:56 字數 2219 閱讀 4764

ps:棧用類實現比較好,可以同時管理多種資料結構。不過對於剛剛接觸的我來說,就看著數,按著書上的流程走吧。我會盡力把棧的特點講解清楚,以後有了更深入的了解,我會再來補充的。

逆波蘭表示法 是一種將運算子寫在運算元後面的描述程式(算式)的方法。舉個例子,我們平常用中綴表示法描述的算式(1+2)*(5+4),改為逆波蘭表示法之後則是1 2 + 5 4 - * 。相較於中綴表示法,逆波蘭法的優勢在於不需要括號。

請輸入以逆波蘭表示法輸入的算式的計算結果。

輸入在一行中輸入1個算式。相鄰的符號(運算元或運算子)用乙個空格符隔開

輸出在1行之中輸出計算結果

限制2≤算

式中操作

數的總數

≤100

2\leq算式中運算元的總數\leq100

2≤算式中操

作數的總

數≤10

0、1≤算式

中運算子

的總數≤

991\leq算式中運算子的總數\leq99

1≤算式中運

算符的總

數≤99

運算子僅包含「+」 「-」 「∗

*∗」, 運算元為106

10^6

106以下的正整數。−1∗

109≤

計算過程

中的值≤

10

9-1*10^9\leq計算過程中的值\leq10^9

−1∗109

≤計算過

程中的值

≤109

輸入示例1 2 + 3 4 - *

輸出示例-3

用c++實現

#include

#include

#include

#define max 1000

using namespace std;

int a[max]

, top;

intpop()

;void

push

(int x)

;int

main()

else

if(s[0]

=='-'

)else

if(s[0]

=='*'

)else

}printf

("%d\n"

,pop()

);return0;

}void

push

(int x)

intpop()

該程式用陣列實現了棧,資料存在字元陣列s中,每次迴圈將資料壓入「棧」s中,top作為棧頂指標,表示最後乙個新增的元素儲存在s中的什麼位置。每一次迴圈中,如果遇到字元型別數字,將轉化為整形型別數字,top+1向後移位後將數字壓入棧中,如果遇到運算子,top-1將其後面的數字return,取出棧中的兩個元素進行運算。最終棧中剩下的數就是結果。

push(x)送來的元素在top+1後壓入棧中,pop()返回top所指的元素後減1.

這只是用陣列簡單的實現棧,乙個用陣列實現的相對完整的棧應該包含如下一些的功能。

//使用陣列實現棧的偽**

initialize()

//initialize函式用來清空棧

top =0;

isempty()

//isempty函式用來檢查top是否為0,判斷棧中是否有元素

return top ==0;

isfull()

//isfull函式用判斷棧中是否已滿

return top >= max -1;

push

(x)/*push函式將top+1後將top所指位置加入元素,

並且每次判斷棧是否已滿*/if(

isfull()

) 錯誤(上溢);

top++

; s[top]

= x;

pop(

)/*pop函式返回top所指的元素,再將top-1

並且每次判斷棧是否為空*/if(

isempty()

) 錯誤(下溢)

top--

;return s[top+

1];

一般情況下,資料結構多以結構體或類的形式實現,以類的形式實現可以同時管理多種資料結構,方便程式呼叫資料。

資料結構之陣列實現棧結構

include include int top int s 返回棧頂位置 int stack empty int s 判斷棧是否為空 int stack full int s 判斷棧是否已滿 void push int s,int x int pop int s return x int main ...

資料結構之ArrayStack棧結構實現思路

首先宣告個arraylist。private arraylist data 接著宣告兩個構造方法,將arraylist結構封裝成 arraystack結構 public arraystack public arraystack int capacity public inte ce stack 獲取...

資料結構之棧的實現

定義 棧是限制插入和刪除只能在乙個位置的上進行的表 叫做後進先出表 該位置是表的末端,叫做棧頂。對棧的基本操作是push 入棧 和pop 出棧 前者是插入元素到棧頂,後者是將棧頂元素刪除 棧的應用 1.平衡符號 編譯器檢查程式的語法錯誤,看看一些符號是否匹配如 是匹配的,而 是不匹配的 2.計算字尾...