3_栈

Posted Real-Ying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:表达式求值

实现步骤:按左到右顺序把后缀表达式压入栈中,按类型,若是操作数压入栈中,若是操作符从栈中出两个操作数形成一个算式算出结果重新压入栈中,最终结果会存放在栈顶

 

以上是关于3_栈的主要内容,如果未能解决你的问题,请参考以下文章

回栈事务后如何持久化分片数据?

这些 C++ 代码片段有啥作用?

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

VSCode 配置 用户自定义代码片段 自定义自动代码补充

nowcoder basic algorithm chapter 3

[AndroidStudio]_[初级]_[配置自动完成的代码片段]