数据结构学习笔记--栈、队列
2018-03-30 10:26
330 查看
栈只允许在一端操作,队列只允许在一段插入,在另一端删除。栈和队列是一种特殊的线性结构(逻辑结构)。 逻辑结构:跟计算机没关系,不考虑如何保存到计算机当中。
栈:一种可以实现“先进后出”的存储结构。(类似于只有一端开口的箱子)
分类:静态栈:内核是数组
动态栈:内核是链表(只能在头部插入和删除)
算法:出栈、入栈
栈只能在一端删除、插入,另一端不允许。
静态分配的内存在栈里,动态分配的内存在堆里。
队列:一种可以是实现“先进先出”的存储结构。只能在一端输入,另一端输出,不能对中间的元素插入、删除,只能对两端操作。
分类:链式队列(基于链表)
静态队列(用数组实现、静态队列通常都必须是循环队列):
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 不满;
队列的具体应用:所有和时间有关的操作都与队列有关。
栈:一种可以实现“先进后出”的存储结构。(类似于只有一端开口的箱子)
分类:静态栈:内核是数组
动态栈:内核是链表(只能在头部插入和删除)
算法:出栈、入栈
栈只能在一端删除、插入,另一端不允许。
静态分配的内存在栈里,动态分配的内存在堆里。
队列:一种可以是实现“先进先出”的存储结构。只能在一端输入,另一端输出,不能对中间的元素插入、删除,只能对两端操作。
分类:链式队列(基于链表)
静态队列(用数组实现、静态队列通常都必须是循环队列):
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 不满;
队列的具体应用:所有和时间有关的操作都与队列有关。
相关文章推荐
- 数据结构学习笔记 --- 队列的应用举例(离散事件模拟)
- 数据结构学习笔记--队列
- 数据结构学习笔记 --- 队列的应用举例(离散事件模拟)
- 数据结构学习笔记 --- 栈、队列 (习题)
- 数据结构学习笔记 --- 栈、队列 (习题)
- 数据结构学习笔记(二) 链表之链队列基本操作
- 数据结构学习笔记之队列
- 严蔚敏版数据结构学习笔记(4):队列
- 数据结构学习笔记-队列的顺序存储(循环队列)
- 【学习笔记10】基本数据结构(栈 队列 链表 有根树)
- 数据结构 学习笔记(三):线性结构:堆栈,队列,表达式求值,多项式加法运算
- 【黑马程序员-学习笔记】数据结构-栈与队列
- 数据结构学习笔记——优先级队列
- 队列的顺序存储和链式表示方法-数据结构学习笔记2.3
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
- 数据结构 学习笔记之:线性表——顺序表、静态链表、动态链表(单链表、双链表、单循环链表、双循环链表,链式栈、链式队列)——基础概念大扫盲!
- 数据结构学习笔记之表、栈、队列
- 数据结构学习笔记10--栈和队列中的一些重点易错知识点
- 数据结构学习笔记-队列的链式存储(C语言实现)
- python数据结构学习笔记-2016-11-05-02-优先级队列