队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
循环对列:头尾相接的顺序存储结构。若队列不空,尾指针指向队列尾部元素的下一个位置。
【当标志变量flag==rear,且flag=0时为队列空,当front==rear,且flag=1时为队列满】
计算队列长度公式:(rear-front+QueueSize)%QueueSize
栈:是限定仅在表尾进行插入和删除操作的线表。
两栈共享:只针对两个具有相同类型的栈的一个设计,一个栈增长,一个栈缩短,(相当于一个栈的栈底为数组的始端,下标为0处,另一个栈的栈底为末端,两个栈如果增加元素,就是两端点向中间延伸)否则会因栈满而溢出。这样让两个栈共享数据,可以最大化地利用数据空间。
栈的链式存储结构:对于链栈,基本不存在栈满的情况,除非内存已经没有可以使用的空间。此时计算机面临死机崩溃问题。
链栈的空其实就是top=NULL
- 顺序存储:线性表的顺序存储是指用一组地址连续的存储单元一次存储线性表的数据元素。在C语言中,可以使用动态数组来实现线性表的顺序存储。
- 栈的链式存储结构:采用单链表实现,链栈的优点是不存在栈满上溢的情况,规定栈的所有操作都是在单链表的表头进行的
**顺序栈与链栈的区别:
**
- 顺序栈需要事先确定一个固定的长度,可能会存在空间的浪费,但是存取时定位很方便。
- 链栈则要求每一个元素都有指针域,同时也增加了一些内存开销,但栈的长度无限制。
递归函数:一个直接调用自己或通过一系列的调用语句间接的调用自己的函数。
对于每一层递归,函数的局部变量,参数值以及返回地址都被压入栈中,在退回阶段,位于栈顶的局部变量,参数值和返回地址被弹出,用于返回调用层次中执行代码的其余部分,也就是恢复了调用的状态。
迭代使用循环结构,递归使用选择结构
**栈的四则运算表达式求值
**
标准四则运算表达式叫做中缀表达式,所有的运算符号都在两数字的中间。
中缀表达式----->后缀表达式:
规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级别低于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。