封裝棧的基本操作及棧的應用

2021-08-30 15:26:00 字數 3035 閱讀 5670

程式**如下:

stack.h

typedef

int sdatatype;

//typedef char sdatatype;

#define maxsize 10

typedef

struct stack

stack;

void

stackinit

(stack* ps)

;void

stackpush

(stack* ps, sdatatype data)

;void

stackpop

(stack* ps)

;sdatatype stacktop

(stack* ps)

;int

stacksize

(stack* ps)

;int

stackempty

(stack* ps)

;

stack.c

#include

"stack.h"

#include

#include

#include

//初始化

void

stackinit

(stack* ps)

//壓棧

void

stackpush

(stack* ps, sdatatype data)

ps->_array[ps->_top++

]= data;

}//出棧

void

stackpop

(stack* ps)

//獲取棧頂元素

sdatatype stacktop

(stack* ps)

//求棧大小

intstacksize

(stack* ps)

//判斷棧是否為空

intstackempty

(stack* ps)

test.c

#include

"stack.h"

#include

#include

//1. 封裝棧的基本操作

// 建議:靜態

#if 0

void

teststack()

intmain()

#endif

//2. 棧的應用

#if 0

//用棧解決括號的匹配問題

intisbrackets

(char c)

'== c)

)return1;

return0;

}void

matchbrackets

(const

char

* str)

//當前字元為右括號

else

//檢測當前括號是否與棧頂括號匹配

c =stacktop

(&s);if

(('('== c &&

')'== str[i])||

('['

== c &&

']'== str[i])||

(''== str[i]))

else}}

}if(stackempty

(&s)

)else

}int

main()

";//左右括號次序不匹配

char b=

"(()))abc"

;//右括號多於左括號

char c=

"(()()abc"

;//左括號多於右括號

char d=

"(())abc"

;//左右括號次序匹配

matchbrackets

(a);

matchbrackets

(b);

matchbrackets

(c);

matchbrackets

(d);

system

("pause");

return0;

}#endif

#if 1

//用棧解決rpn(逆波蘭表示式--字尾表示式)求值

typedef

enum

operator;

typedef

struct cell

cell;

//12*(3+4)-6+8/2--->12 3 4 + * 6 - 8 2 / +

intcalcrpn

(cell* rpn,

int size)

stackpush

(&s, left / right)

;break;}

}}return

stacktop

(&s);}

intmain()

,,,,

,,,,

,,};

printf

("%d\n"

,calcrpn

(rpn,

sizeof

(rpn)

/sizeof

(rpn[0]

)));

system

("pause");

return0;

}#endif

程式執行結果如下:棧的封裝:

用棧解決括號的匹配問題

用棧解決rpn(逆波蘭表示式–字尾表示式)求值

棧的基本操作及粗淺應用

pragma once include include include include define stack init deep 100 typedef int datatype typedef struct stackstack,pstack 初始化棧 void stackinit pstac...

棧的實現及基本操作pta棧的操作

給定乙個初始為空的棧和一系列壓棧 彈棧操作,請編寫程式輸出每次彈棧的元素。棧的元素值均為整數。輸入格式 輸入第1行為1個正整數n,表示操作個數 接下來n行,每行表示乙個操作,格式為1 d或0。1 d表示將整數d壓棧,0表示彈棧。n不超過20000。輸出格式 按順序輸出每次彈棧的元素,每個元素一行。若...

棧的基本操作及實現(順序棧)

順序儲存結構來實現的棧稱為順序棧,它利用一組位址連續的儲存單元存放自棧底到棧頂的資料元素,同時附設乙個指標top來指示當前棧頂的位置。注意,是c 特有的用來表示引用呼叫,所以此檔案應以.cpp字尾儲存 結構體為 define maxsize 50 typedef int elemtype typed...