栈与队列

来源:互联网 发布:2011年网络春晚 编辑:程序博客网 时间:2024/05/20 22:28

1、栈的定义

栈是限定仅在表尾进行插入和删除操作的线性表,Last In First Out。
注意:
线性表,栈元素具有线性关系,即前驱后继关系。

2、两栈共享空间

typedef struct {
int data[MAXSIZE];
int top1; //stack1 栈顶指针
int top2;
}SqDoubleStack;
两个栈的栈顶相对,top1初始为-1和top2初始为n同时往中间走。

3、栈的链式存储结构及实现

不需要头结点。头指针为NULL时为空栈。

4、栈的应用——递归

我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数。

每个递归定义至少有一个条件,满足时递归不在进行,即不再引用自身而是返回值退出。

5、栈的应用——四则运算表达式求值

5.1、后缀(逆波兰)表示法定义

逆波兰表示法是没有括号的。
规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到符号就将栈顶两个数字出栈,进行运算,运算结果进栈,直到结束。

5.2、中缀表达式转后缀表达式

规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,1、是右括号则将左括号之前的全部输出,并弹出左括号,2、不是右括号,优先级不大于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,直到栈顶元素优先级小于当前符号,并将当前符号进栈,一直到最终输出为止。

6、队列

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
顺序存储时,插入为O(1),删除为O(n)。
链式存储时,front指针指向队头元素,rear指针指向队尾元素的下一个位置,所以二者相等时,队列不是还剩一个元素而是空队列。这样避免了只有一个元素时,队头和队尾重合的麻烦。

循环队列

0 0
原创粉丝点击