用棧實現的簡單操作

2021-10-03 16:36:33 字數 2842 閱讀 8316

眾所周知,棧(stack)是限定在表尾進行插入或刪除操作的線性表,其特點是後進先出

允許刪除和插入的一端稱為棧頂(top),另一端稱為棧底(base)

根據這個特性,可以實現多種實際應用,本文跟大家分享十進位制轉換其他進製數括號匹配檢驗的應用舉例

#include

using

namespace std;

#define ok 1

#define error 0

#define stack_init_size 100

//設定儲存空間初始分配量為100

#define stackincrement 10

//設定儲存空間分配增量為10

typedef

int status;

#define selemtype int

typedef

struct

sqstack;

//棧的定義

status initstack

(sqstack& s)

//建立空棧

int

stackempty

(sqstack s)

//判斷棧是否為空

intstackfull

(sqstack s)

//判斷棧是否滿

status  push

(sqstack& s, selemtype e)

//入棧

*s.top++

= e;

//等價於 *s.top=e; s.top++;

return ok;

}

status pop

(sqstack& s,selemtype &e)

//出棧,並用e返回刪除值

status gettop

(sqstack s, selemtype& e)

//返回棧頂元素

此處說明,s.top指標是指向最上面乙個元素上面的乙個空間,是沒有資料值的,如圖:

對比入棧出棧和取棧頂元素

入棧時,對s.top先賦值,後自加

*s.top++

= e;

//等價於 *s.top=e; s.top++;

取棧頂元素,即取(s.top-1)的值

e =

*(s.top-1)

;

出棧時,先取棧頂元素,再自減

e=

*--s.top;

//相當於e=*(s.top-1); --s.top;

由於十進位制轉其他進製數的方法中,計算順序和輸出順序相反,故可以利用棧的「後進先出」的特點,來實現十進位制向其他進製的轉換。

思路如下:

初始化乙個棧,輸入乙個十進位制數

將十進位制數除以8,把餘數入棧

將商作為被除數,重複第一步,直到商為0

當商為0時,輸出棧

void

convert()

//將十進位制數轉換為八進位制數

while(!

stackempty

(s))

cout << endl;

}

本函式只識別兩種括號:"("、")"、"["、"]"

其他括號思路相同,以此類推

思路如下:

初始化乙個棧,輸入乙個括號序列

依次對括號序列中的字元進行如下判斷:

2.1 如果是左括號,則進棧,回到步驟2

2.2 如果是其他字元,則格式不正確。程式結束

2.3 如果是右括號,則取出棧頂元素判斷:

3.判斷棧是否為空棧,若為空,則括號序列格式正確,否則,格式錯誤

void

match()

else

if(a[i]

==')'

|| a[i]

==']')}

else

}else}if

(stackempty

(s)) cout <<

"匹配"

<< endl;

else cout <<

"不匹配"

<< endl;

}

int

main()

}return0;

}

執行如下

對於主函式中的switch語句,我存在以下未解決的問題:

我低頭幫陌生人拾起掉落的書的時候,心裡已經劃過了整個四季

陣列實現簡單的棧操作

微控制器開發過程中,常常會用到棧操作,例如多級選單的頁面跳轉,這裡分享乙個自己c語言寫的非常簡單的棧操作檔案供各位參考。include bsp user stk.h uint8 t stack stack size io static int top element 1 指向棧頂元素的指標 void...

用陣列實現棧的基本操作

給定乙個陣列,大小給定,用n表示,讓你設計個程式,用該陣列實現棧的基本操作 棧是先進後出,首先定義乙個變數index,代表如果放入乙個數 push操作 應該放到陣列的index位置 也代表當前棧中有幾個數 push操作 如果index等於陣列的大小,說明棧中數字滿了,給使用者報錯。否則,將這個數放入...

用棧實現佇列 用佇列實現棧

棧的特點 filo firstinlastout 僅能從棧頂插入,刪除元素。最基本的介面包括push 從棧頂壓入元素 pop 從棧頂彈出元素 佇列的特點 fifo firstinfirstout 僅能從隊頭刪除元素,從隊尾插入元素。最基本的介面包括enque 從隊尾插入元素 deque 從隊頭刪除元...