一、栈的定义和运算
1.栈的定义
栈是一种特殊的线性表,插入或删除栈元素的运算只能在表的一端进行,称运算的一端为栈顶,另一端称为栈底。
特点:后进先出
栈又称为“后进先出”的线性表,简称LIFO表。
二、栈的应用举例
1.数制转换
void conversion( ) {
initstack(S);
scanf (“%”,N);
while(N){
push(S,N%8)
N=N/8;
}
while(! Stackempty(S)){
pop(S,e);
printf(“%d”,e);
}
}
2.括号匹配的检验
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套顺序随意,例:
( [ ] ( ) )或[ ( [ ] [ ] ) ]等为正确的格式
[( ])或([( ))或(( )])均为不正确的格式。
检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。
bool matching(char exp[], int n) {
int i = 0;
mat = true;
InitStack(S);
while ( i<n && mat ) {
switch of exp[i] {
case 左括弧:{
Push(S,exp[i]); i++; break; }
case ) : {
if ( !StackEmpty(S) && GetTop(S) == ( )
{
Pop(S, e); i++; }
else {
mat = false;}
break; } //case ')'
… …
</