您的位置:首页 > 理论基础 > 数据结构算法

数据结构一:栈和队列

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>中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: