📅  最后修改于: 2021-01-11 06:45:15             🧑  作者: Mango
队列是一种抽象的数据结构,有点类似于堆栈。与堆栈不同,队列的两端都打开。一端始终用于插入数据(入队),另一端用于删除数据(出队)。队列遵循先进先出的方法,即首先存储的数据项将首先被访问。
队列的真实示例可以是单车道单向道路,车辆首先进入,然后首先离开。在售票窗口和公交车站的队列中,可以看到更多实际示例。
现在我们知道在队列中,出于不同原因访问两端。下面给出的下图试图将队列表示解释为数据结构-
与在堆栈中一样,也可以使用数组,链接列表,指针和结构来实现队列。为了简单起见,我们将使用一维数组实现队列。
队列操作可能涉及初始化或定义队列,利用它,然后从内存中完全删除它。在这里,我们将尝试了解与队列相关的基本操作-
enqueue() -向队列添加(存储)项目。
dequeue() -从队列中删除(访问)一个项目。
需要很少的功能来使上述队列操作高效。这些是-
peek() -在队列的最前面获取元素而不删除它。
isfull() -检查队列是否已满。
isempty() -检查队列是否为空。
在队列中,我们总是出队(或访问)由前指针指向的数据,而在将数据入队(或存储)到队列中时,我们会使用后指针的帮助。
首先让我们了解队列的支持功能-
此函数有助于查看队列最前面的数据。 peek()函数的算法如下-
算法
begin procedure peek
return queue[front]
end procedure
用C编程语言实现peek()函数-
例
int peek() {
return queue[front];
}
当我们使用单维数组实现队列时,我们只需检查后指针达到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()函数的算法-
算法
begin procedure isempty
if front is less than MIN OR front is greater than rear
return true
else
return false
endif
end procedure
如果front的值小于MIN或0,则表明队列尚未初始化,因此为空。
这是C编程代码-
例
bool isempty() {
if(front < 0 || front > rear)
return true;
else
return false;
}
队列维护两个数据指针,前和后。因此,它的操作比堆栈的实现相对困难。
应该采取以下步骤将数据排队(插入)到队列中-
步骤1-检查队列是否已满。
步骤2-如果队列已满,则产生溢出错误并退出。
步骤3-如果队列未满,请增加后指针以指向下一个空白空间。
步骤4-将数据元素添加到后方指向的队列位置。
步骤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
从队列访问数据是两个任务的过程-访问前端指向的数据并在访问后删除数据。采取以下步骤执行出队操作-
步骤1-检查队列是否为空。
步骤2-如果队列为空,则产生下溢错误并退出。
步骤3-如果队列不为空,请访问front指向的数据。
步骤4-递增前指针以指向下一个可用的数据元素。
步骤5-返回成功。
procedure dequeue
if queue is empty
return underflow
end if
data = queue[front]
front ← front + 1
return true
end procedure
用C编程语言实现dequeue()-
例
int dequeue() {
if(isempty())
return 0;
int data = queue[front];
front = front + 1;
return data;
}
有关使用C编程语言的完整Queue程序,请单击此处。