栈与队列Part2--队列的定义、顺序、循环、链队列及其部分操作具体实现(C语言描述)

此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢!


一、队列(Queue)的定义:

  • 队列(Queue) : 是只允许在一端进行插入操作,在另一端进行删除操作的特殊的线性表。

队列是一种先进先出(FIFO)的线性表。允许插入的一段称为队尾(an),允许删除的一端称为队头(a1)。
队列在程序设计中用的很频繁。例如,我们用键盘进行各种输入到显示器上的输出;客服系统;操作系统。

同样地,作为一种特殊的线性表,队列也有顺序、链式两种存储结构。

在这里插入图片描述


二、队列的抽象数据类型:

队列也有类似线性表的各种操作特性。但操作上会有些区别,特别是插入与删除操作。

Data: 性质同线性表。数据元素具有相同的类型,相邻元素具有前驱和后驱的关系。

[ADT of queue: ]

Operations :
	InitQueue(*Q) : Set up an empty queue. //初始化操作,建立一个空队列Q。 
	DestroyQueue(*Q) : Destroy the queue if it exists. //若队列存在,则销毁它。 
	ClearQueue(*Q) : Empty the queue. //将队列清空。
	QueueEmpty(Q) : (Bool Type) Judge whether the queue is empty. //若队列为空,则返回true,否则返回false。
	GetHead(Q, *e) : If the queue exists and not empty, give the top element value to "e" and return "e". //若队列存在且非空,用e返回S的队头元素。
	EnQueue(*Q, e) : If the queue exists, push new element "e" into queue to be the top. //若队列存在,插入新元素e到栈S中并成为队尾元素。 
	DeQueue(*Q, *e) : Delete the top element in stack, give its value to "e", and return "e". //删除队列S中的队头元素,并用e返回其值。
	QueueLength(Q) : Return the amount of elements in the queue. //返回队列中元素个数。

end ADT

三、队列的顺序存储结构(Sequential Queue):

基于对队头的标定,关于这种存储结构有两种假设方法:

  1. 假设一个队列有n个元素,首先我们需要建立一个大于n的数组,并且将队列的所有元素存储在数组的前n个单元,数组下标为0的一端即是队头。易分析得,此时的入队列操作其实就是在队尾追加一个元素,不需要移动任何元素,T(n)= O(1)。但是由于队列的特性,当进行出队列操作时,所有元素都需要向前移动,以保证队头不为空,T(n) = O(n)。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值