数据结构一:栈和队列
2015-11-06 17:07
232 查看
重新捡回以前学的东西。小白水平,不喜勿入。
栈和队列是数据结构基础中的基础。
一切数据结构的本质,在于对内存空间的管理和封装。连续的内存空间,我们也可以将其当成数组来看。在这个假设的基础上,一切数据结构都是对数组的封装,或者封装的封装。
栈和队列管理的空间我们姑且认为是一个数组好了,就像这样。
S
栈:
后进先出的数据结构,可操作的是数组最后插入的元素。维护一个节点top[s],指向数组最后插入的元素。那么S[1]为栈底元素,S[top[S]]为栈顶元素。栈的元素数量为top[S],这也是栈的size。栈的push操作为top[S] = top[S] +1,S[top[S]] = x。栈的删除操作为top[S] = top[S] -1,S[top[S]] = x。这两个操作的复杂度均为1。
如果试图在空栈中弹出元素,称为栈底溢出。如果试图在满栈中插入元素,称为栈顶溢出。面对栈顶溢出,通常的做法是将内存空间扩大为原来的两倍,再行插入。
队列:
先进先出的数据结构,在广度优先搜索中应用最多。
维护一个head和一个tail,分别指向队头和队尾。每出一个元素head++,每插入一个元素tail++。如果tail超过了size,则从1开始。如果tail+1==head,则说明队列满。当队列为空时,从中删除元素则称为队列下溢出;当队列满数,试图插入元素则导致上溢出。面对上溢出,通常的做法是将内存空间扩大为原来的两倍,再行插入。
在C++的STL中,这两个数据结构分别包含在<stack>和<queue>中
栈和队列是数据结构基础中的基础。
一切数据结构的本质,在于对内存空间的管理和封装。连续的内存空间,我们也可以将其当成数组来看。在这个假设的基础上,一切数据结构都是对数组的封装,或者封装的封装。
栈和队列管理的空间我们姑且认为是一个数组好了,就像这样。
后进先出的数据结构,可操作的是数组最后插入的元素。维护一个节点top[s],指向数组最后插入的元素。那么S[1]为栈底元素,S[top[S]]为栈顶元素。栈的元素数量为top[S],这也是栈的size。栈的push操作为top[S] = top[S] +1,S[top[S]] = x。栈的删除操作为top[S] = top[S] -1,S[top[S]] = x。这两个操作的复杂度均为1。
如果试图在空栈中弹出元素,称为栈底溢出。如果试图在满栈中插入元素,称为栈顶溢出。面对栈顶溢出,通常的做法是将内存空间扩大为原来的两倍,再行插入。
队列:
先进先出的数据结构,在广度优先搜索中应用最多。
维护一个head和一个tail,分别指向队头和队尾。每出一个元素head++,每插入一个元素tail++。如果tail超过了size,则从1开始。如果tail+1==head,则说明队列满。当队列为空时,从中删除元素则称为队列下溢出;当队列满数,试图插入元素则导致上溢出。面对上溢出,通常的做法是将内存空间扩大为原来的两倍,再行插入。
在C++的STL中,这两个数据结构分别包含在<stack>和<queue>中
相关文章推荐
- 2015年大二上-数据结构-栈(1)-顺序栈算法库
- 希尔排序
- 直接插入排序
- linux设备驱动之输入(input)子系统——数据结构与接口介绍
- 数据结构与算法javascript描述(二) 优先队列实例
- 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
- 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
- 字符串插入块链实现——数据结构上机实验
- 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
- 清华数据结构 PA题目--列车调度(Train)
- Java 数据结构原理分析
- 【数据结构】BST:二叉排序树算法
- 【数据结构】逆波兰表示法(RPN):中缀表达式转后缀表达式
- 第八周--数据结构--自建算法库之链串
- 第八周 数据结构实践项目——串 【项目1 - 建立顺序串的算法库】
- 散列表实现
- 第10周SHH数据结构-【项目2- 二叉树遍历的递归算法 】
- 第10周SHH数据结构-【项目1 -二叉树算法库 】
- 第八周--数据结构--建立顺序串算法库
- 数据结构基础:二叉树,堆,多叉树