資料結構 棧與佇列的應用

2021-10-18 14:37:58 字數 2534 閱讀 3962

一、要求:

1)輸入乙個十進位制數,利用棧操作,將該數轉換成n進製數。

2)輸入乙個表示式,表示式中包括三種括號「()」、「」和「{}」,判斷該表示式的括號是否匹配。

二、思路:

1)進製轉換

任意乙個十進位制正整數n,都能轉化為乙個d進製正整數。該演算法基於原理n=(n/d)*d+n%d 。在n不為0的前提下,執行迴圈操作:

讓n%d的結果入棧,並執行n=n/d改變n值。

計算結束後,再將棧中的元素依次出棧,即可得到從高位到低位的輸出結果。此處要考慮兩種情況,一種是將十進位制轉為低於10的進製的情況,另一種是高於10的進製的情況。

2)判斷括號是否匹配

設定乙個空棧,掃瞄給定的表示式,若遇到左括號則將其入棧等候配對,若遇到右括號,首先判斷棧是否為空,若為空,說明給定的表示式中右括號多了;若不為空,則將棧頂元素(左括號)出棧,讓其與右括號配對。當給定的表示式掃瞄結束後,若棧空,說明給定的表示式中括號匹配,若棧非空,說明給定的表示式中左括號多了,表示式中的括號不匹配。

三、**和結果:

1)進製轉換:

#include

#include

#define stackinitsize 100

//初始大小

#define stackincrement 10

//儲存空間增量

typedef

struct

sqstack;

//順序棧的型別

//******初始化********//

void

initstack

(sqstack &s)

//********判空**********//

intstackempty

(sqstack s)

//********入棧 ********//

void

push

(sqstack &s,

int e)

s.base[s.top++

]= e;

}//*********出棧********//

void

pop(sqstack &s,

int&e)

//*******十進位制正整數轉換為d進製正整數*********//

void

conversion

(sqstack &s,

int n,

int d)

while(!

stackempty

(s))

}void

main()

結果:

轉為16進製制:

2)判斷括號是否匹配

#include

#include

#define stackinitsize 100

//初始大小

#define stackincrement 10

//儲存空間增量

typedef

struct

sqstack;

//順序棧的型別

//******初始化********//

void

initstack

(sqstack &s)

//********判空**********//

intstackempty

(sqstack s)

//********入棧 ********//

void

push

(sqstack &s,

char e)

s.base[s.top++

]= e;

}//*********出棧********//

void

pop(sqstack &s,

char

&e)//*******判斷括號是否匹配********//

intbracketscheck

(sqstack &s,

char

*str)'||

*p==

']'||

*p==

')')

'&& ch !=

' p++;}

if(!stackempty

(s))

//左括號多

return0;

return1;

}void

main()

結果:

**僅代表本人初識資料結構時思路。

資料結構 棧與佇列

題目 1.編寫函式,採用鏈式儲存實現棧的初始化 入棧 出棧操作 2.編寫函式,採用順序儲存實現棧的初始化 入棧 出棧操作 3.編寫函式,採用鏈式儲存實現佇列的初始化 入隊 出隊操作 4.編寫函式,採用順序儲存實現佇列的初始化 入隊 出隊操作 5.編寫乙個主函式,在主函式中設計乙個簡單的選單,分別除錯...

資料結構 棧與佇列

棧的原則是後進先出,即插入與刪除元素均在棧頂進行。獲取棧頂元素 s.top 佇列的原則是先進先出,即插入資料在隊尾進行,刪除資料在隊頭進行。獲取隊頭元素 q.front 思路 用兩個棧,乙個棧用來進隊,乙個棧用來出隊,當資料進入佇列的時候,我們將其壓入乙個棧,當資料出隊的時候,我們將儲存在棧內的資料...

資料結構 棧與佇列

1.順序棧 基本操作 typedef int elemtype 定義 順序棧 typedef struct sqstack 判空 bool stackempty sqstack s 進棧 bool push sqstack s elemtype x 出棧操作 bool pop sqstack s e...