队列是一个抽象的数据结构,与堆栈有些相似。较对比于栈,队列打开两端。 一端总是用来插入数据(排队),另一个是用来删除数据(离队)。 队列使用先入先出的方法,即,第一存储的数据项先被访问。如下:

队列中的一个真实的例子可以是单向的车道单行道,其中车辆第一进入,第一离开。更多真实世界的例子可以看出,队列在售票窗口和巴士站。
队列表示
正如我们现在知道,在队列中访问两端出于不同的原因,如下图试图解释队列表示数据结构 -

与栈,队列相同,也可以使用数组,链表,指针和结构来实现。为简单起见,我们将使用一维数组实现队列。
基本操作
队列操作可能涉及到初始化或定义队列,利用它完成从内存中清除它。在这里,我们将试着去了解使用队列相关的基本操作 -
-
enqueue() − 添加(存储)项目到队列中。
-
dequeue() − 从队列中删除(访问)项目。
很少有更多的功能需要在上述队列提高操作效率。它们有 -
-
peek() − 获得在队列前面的元素而不移除它。
-
isfull() − 检查队列是否已满。
-
isempty() − 检查队列是否为空。
在队列中,我们总是出队(或访问)数据,通过前面的指针,查询(或存储)我们把后面的指针的帮助下将队列中的数据指出。
让我们先来了解一个队列的辅助功能 −
peek()
像栈,此功能可以看到在队列的前部的数据。peek() 函数算法如下 −
begin procedure peek return queue[front] end procedure
在C语言中 peek()函数的实现-
int peek() { return queue[front]; }
isfull()
由于我们使用一维数组实现的队列,我们只是检查后指针要达到最大范围(MAXSIZE),以确定队列已满。在情况下,我们保持队列以循环链表的形式,该算法将有所不同。isfull()函数算法如下:
begin procedure isfull if rear equals to MAXSIZE return true else return false endif end procedure
在C语言中的 isfull()函数的实现 -
bool isfull() { if(rear == MAXSIZE - 1) return true; else return false; }
isempty()
isEmpty()函数算法 -
begin procedure isempty if front is less than MIN OR front is greater than rear return true else return false endif end procedure
如果前面的值小于 MIN 或 0,它告诉队列尚未初始化,因此空。
下面是C语言编程代码 -
bool isempty() { if(front < 0 || front > rear) return true; else return false; }
入队操作
由于队列维护两个数据指针,前部和后部,其操作比堆栈相对较难实现。
应采取以下步骤来将数据排入队列(插入)到一个队列 -
-
Step 1 − 检查队列是否已满
-
Step 2 − 如果队列已满,产生溢出错误,然后退出
-
Step 3 − 如果队列未满,增加尾部指针指向下一个空的空间
-
Step 4 − 添加数据元素到队列位置,其中后方(rear)指向
-
Step 5 − 返回成功

有时,我们还要检查,如果队列被初始化或不处理任何意外情况。
排入队列的操作算法
procedure enqueue(data) if queue is full return overflow endif rear ← rear + 1 queue[rear] ← data return true end procedure
排入队列 enqueue() 函数的 C语言的实现-
int enqueue(int data) if(isfull()) return 0; rear = rear + 1; queue[rear] = data; return 1; end procedure
解列操作
从队列中访问数据是两个任务的过程 − 访问前在这里指的是所指向的数据,以及访问后删除数据。将采取以下步骤来执行解列操作 -
-
Step 1 − 检查队列是否为空
-
Step 2 − 如果队列为空,产生溢错误,然后退出
-
Step 3 − 如果队列不为空,访问数据,并向前指向
-
Step 3 − 增量前指针指向下一个可用的数据元素
-
Step 5 − 返回成功

算法解列操作 -
procedure dequeue if queue is empty return underflow end if data = queue[front] front ← front - 1 return true end procedure
出队列 dequeue() 的C语言实现:
int dequeue() { if(isempty()) return 0; int data = queue[front]; front = front + 1; return data; }
对于C编程语言的完整队列程序,请点击这里