栈和队列

来源:互联网 发布:假冒品牌淘宝介入后果 编辑:程序博客网 时间:2024/06/07 10:15

栈和队列都是特殊的线性表,但是是操作受限制的线性表

一、栈(LIFO结构)

   1、顺序栈:

      用数组进行存储。利用数组是否为空进行栈为空的判断。有的时候有多个栈同时存在的情况,如果没有给足够大的空间的话就会导致栈溢出。一般解决方法是定义一个足够大的栈空间,此存储空间的连段分别设为两个栈的栈底,两个栈的栈顶都想中间伸展,直到两栈顶相遇才溢出。

      一般有多个栈,最好还是使用链式存储结构      

   2、链式栈

      当程序中有多个栈时,使用链式栈,不仅可以防止溢出,还可以共享空间,提高存储效率。一般不使用头节点,直接实现

 

二、队列(FIFO

队列一般只允许一端进行入队和出队。还有一种限定性数据结构:双端队列。一端可以进行两种操作,一端一种

1、链式队列

表示一个队列,需要一个队头指针和队尾指针。链式队列适合数据变动比较大的情形,一般不存在溢出。当程序有多个队列时,尽量使用链式队列,这样不会出现存储分配问题,也不用进行数据元素移动

2、顺序存储

      用一个一维数组,并且维护两个变量——frontrear,存储队头和队尾。用一维,如果不经过处理,会出现假溢出现象(比如A数组有5个空间,A3为队头,A5为队尾,这样这个队再在队尾插入数据就会溢出,但是A明明还有空间)。应该使用循环队列,使首尾相接,使用%实现。判断队列是否满时,不能通过front==rear判断,因为这种情况队为空的时候也满足。有两种方法进行处理:1、另外设立一个专门的标识符区别队列是否满 2、少用一个元素空间,规定队头在队尾的下一个位置时为满

  

0 0