队列

来源:互联网 发布:文字输出源码 编辑:程序博客网 时间:2024/05/21 22:26

     什么是队列?

     队列是一种特殊的线性表,与栈不同的是队列的插入和删除操作都在队列的两端进行。

     什么是入队什么是出队?

     队列的插入操作称为入队,队列的删除操作称为出队。

     队列的顺序存储可用如下结构表示:

     #define MAXSIZE 100

     typedef init datatye;

     typedef struct {

     datatype a[MAXSIZE];

     int rear;

     int front;

     }queue;

    队列的常见操作:

1)队列初始化  void init_queue(queue *q )

队列初始化的实质在于让rear和front都指向0,这样即无数据入队又无数据出队。 

2)判断队列是否为空 int is_empty_queue(quene *q)

队列是否为空的判断依据为rear和front是否相等当返回为1时表示是空

3)打印队列结点值 void print_queue(queue *q)

先判断为空吗?不为空则顺序遍历队列中的值然后打印出来

4)取队首结点的值   datatype get_first(queue *q)

先判断为空吗?不为空则取front位置处的值

5)队列的插入操作 void insert_queue(queue *q)

首先判断超过队列的最大大小吗?若没有则向rear位置处插入值并且rear自增

6)队列的删除操作 void delete_queue(queue *q)

首先判断队列是否为空,若不为空则进行删除把front位置前移

队列有个缺点那就是:当经过一系列的插入和删除操作以后,假使插入的数据很多则队列就没有更多的空间进行插入了

队列已满了,但是前面被删除的结点的那些空间却没有被利用起来。于是这是缺点使得一般的队列不太有使用价值。

 

什么是顺序循环队列?

人们通过一种思维的抽象把一般的队列假想成是一个首尾相连的队列看上去像一个圆圈。

但是一但有了这样的抽象,队列为空或已满的判断条件也要随之修改。

循环队列为空条件:front == rear

循环队列已满条件:(rear + 1)  % MAXSIZE == front (此种方法将会损失一个数据的空间)

循环队列的操作与一般的队列相同。参照如上几个操作。