数据结构&算法 队列
-
队列
队列是一种抽象的数据结构,有点类似于堆栈。与堆栈不同,队列的两端都是打开的。一端始终用于插入数据(入队),另一端用于删除数据(出队)。队列遵循先进先出的方法,即首先存储的数据项将首先被访问。队列的真实示例可以是单车道单向道路,车辆首先进入,然后首先离开。在售票窗口和公交车站的队列中,可以看到更多实际示例。 -
队列表示
现在我们知道在队列中,出于不同的原因访问两端。下面给出的下图试图将队列表示解释为数据结构-与在堆栈中一样,也可以使用数组,链接列表,指针和结构来实现队列。为了简单起见,我们将使用一维数组实现队列。 -
基本操作
队列操作可能涉及初始化或定义队列,利用它,然后从内存中完全擦除它。在这里,我们将尝试了解与队列相关的基本操作-- enqueue() -向队列添加(存储)项目。
- dequeue() -从队列中删除(访问)一个项目。
需要很少的功能来使上述队列操作高效。这些是-- peek -在队列的最前面获取元素而不删除它。
- isfull -检查队列是否已满。
- isempty -检查队列是否为空。
在队列中,我们总是使前指针所指向的数据出队(或访问),而在队列中将数据入队(或存储)时,我们会使用后指针。首先让我们了解队列的支持函数-peek()此功能有助于查看队列前面的数据。peek()函数的算法如下-用C编程语言实现peek()函数-isfull()当我们使用单维数组实现队列时,我们只需检查后指针达到MAXSIZE即可确定队列已满。如果我们将队列维护在循环链表中,则算法将有所不同。isfull()函数的算法-用C编程语言实现isfull()函数-isempty()isempty()函数的算法-如果front的值小于MIN或0,则表明队列尚未初始化,因此为空。用C编程语言实现isempty()函数- -
入队操作
队列维护两个数据指针,前和后。因此,它的操作比堆栈的实现相对困难。应该采取以下步骤将数据排队(插入)到队列中-- 步骤1-检查队列是否已满。
- 步骤2-如果队列已满,则产生溢出错误并退出。
- 步骤3-如果队列未满,请增加后指针以指向下一个空白空间。
- 步骤4-将数据元素添加到后方指向的队列位置。
- 步骤5-返回成功。
有时,我们还会检查队列是否已初始化,以处理任何无法预料的情况。入队操作算法enqueue()在C编程语言中的实现-- -
出队操作
从队列访问数据是两个任务的过程-访问前端指向的数据并在访问后删除数据。采取以下步骤执行出队操作-- 步骤1-检查队列是否为空。
- 步骤2-如果队列为空,则产生下溢错误并退出。
- 步骤3-如果队列不为空,请访问front指向的数据。
- 步骤4-递增前指针以指向下一个可用的数据元素。
- 步骤5-返回成功。
出队操作算法用C编程语言实现dequeue()- -