3_栈
逻辑结构
栈是限定只能在表尾进行插入或删除操作的线性表
“后进先出”
存储结构
顺序栈表示方法:
#define MaxSize 50 //最大个数 typedef struct{ ElemType data[MaxSize]; //数据元素 int top; //栈顶指针 }SqStack;
s.top=-1 //栈空条件,也是初始化,栈顶指针为-1
s.top=MaxSize-1 //栈满条件
s.top+1 //栈长
s.data[++s.top]=x //进栈,指针先加1再入栈
x=s.data[s.top--] //出栈,先出栈指针再加1
链式栈表示方法:
typedef struct Linknode{ ElemType data; //数据域 struct LinkList *next; //指针域 }*LinkStack //类型定义
共享栈:
top2-top1=1 //栈满条件
s1.[++top1]=x //1号栈进栈top1先加1再赋值
s2.[--top2]=x //2号栈进栈top2先减1再赋值
应用1:括号匹配
实现步骤:建立空栈,将括号按顺序读取,若是左括号则刷新目前最迫期待匹配,其他的期待匹配紧迫性降一级;若是右括号则栈顶最迫期待得以消解,直到栈空(前提是未匹配括号组顺序正确)
应用2:表达式求值
实现步骤:按左到右顺序把后缀表达式压入栈中,按类型,若是操作数压入栈中,若是操作符从栈中出两个操作数形成一个算式算出结果重新压入栈中,最终结果会存放在栈顶