您的位置:首页 > 其它

第三章:比较总结栈和队列

2014-11-02 02:02 204 查看
栈和队列是操作位置受限的线性表,即对插入和删除的位置加以限制。

栈是限制仅在表的一端进行插入和删除运算的线性表又称为后进先出表(LIFO表)。插入、删除端称为栈顶,另一端称栈底。表中无元素称空栈。

栈是仅允许在表的一端进行插入和删除的线性表,因而是后进先出表。就好像食堂里的一摞盘子,只能一个一个往上放,也只能从那一头一个一个往下取。

栈的顺序存储结构称顺序栈。当栈满时,做进栈运算必定产生空间溢出,称“上溢”。 当栈空时,做退栈运算必定产生空间溢出,称“下溢”。上溢是一种错误应设法避免,下溢常用作程序控制转移的条件。

队列是一种运算受限的线性表,允许删除的一端称队首,允许插入的一端称队尾。队列又称为先进先出线性表,FIFO表。

队列是允许在表的一端进行插入,另一端进行删除操作的线性表,因而是先进先出表。队列是一边进一边出的,就好像我们在食堂里排队一样,队头出列,队尾入列。

队列的顺序存储结构称顺序队列。设置front和rear指针表示队头和队尾元素在向量空间的位置。顺序队列中存在“假上溢”现象,由于入队和出队操作使头尾指针只增不减导致被删元素的空间无法利用,队尾指针超过向量空间的上界而不能入队。

为克服“假上溢”现象,将向量空间想象为首尾相连的循环向量,存储在其中的队列称循环队列。i=(i+1)%queuesize

循环队列的边界条件处理:由于无法用front==rear来判断队列的“空”和“满”。解决的方法有:

1)另设一个布尔变量以区别队列的空和满;

2) 少用一个元素,在入队前测试rear在循环意义下加1是否等于front;

3) 使用一个记数器记录元素总数。

队列的链式存储结构称为链队列,一个链队列就是一个操作受限的单链表。为了便于在表尾进行插入(入队)的操作,在表尾增加一个尾指针,一个链队列就由一个头指针和一个尾指针唯一地确定。链队列不存在队满和上溢的问题。在链队列的出队算法中,要注意当原队中只有一个结点时,出队后要同进修改头尾指针并使队列变空。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: