栈只允许在一端操作,队列只允许在一段插入,在另一端删除。栈和队列是一种特殊的线性结构(逻辑结构)。 逻辑结构:跟计算机没关系,不考虑如何保存到计算机当中。
栈:一种可以实现“先进后出”的存储结构。(类似于只有一端开口的箱子)
分类:静态栈:内核是数组
动态栈:内核是链表(只能在头部插入和删除)
算法:出栈、入栈
栈只能在一端删除、插入,另一端不允许。
静态分配的内存在栈里,动态分配的内存在堆里。
队列:一种可以是实现“先进先出”的存储结构。只能在一端输入,另一端输出,不能对中间的元素插入、删除,只能对两端操作。
分类:链式队列(基于链表)
静态队列(用数组实现、静态队列通常都必须是循环队列):
1、静态队列为什么必须是循环队列?(使空间可再利用)
2、循环队列需要几个参数来确定?(两个。2个参数在不同场合有不同的意义)1)初始化。front和rear的值都是0。2)队列非空。front代表队列的第一个元素,rear代表队列最后一个有效元素的下一个元素。3)队列空。front和rear的值相等,但不一定为0。
3、入队伪算法演示:1)将值存入r所代表的位置;2)r=(r+1)%数组的长度
4、出队伪算法演示:f=(f+1)%数组的长度 (对数组长度取余是为了能由尾部跳到首部)
5、如何判断循环队列是否为空?front与rear值相等
6、如何判断循环队列已满?
两种方式:
1、多增加一个表标识参数
2、少用一个元素(如果有n个,只用n-1个)
如果r和f的值紧挨着,则队列已满。
if((r+1)%数组长度 == f) 已满;else 不满;
队列的具体应用:所有和时间有关的操作都与队列有关。