温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

六、队列的实现

发布时间:2020-07-17 13:56:16 来源:网络 阅读:244 作者:少年不在了 栏目:编程语言

队列的定义及实现

队列的定义
  队列是一种特殊的线性表
  队列仅在线性表的两端进行操作
   队头(Front):取出数据元素的一端
   队尾(Rear):插入数据元素的一端
队列的性质
  先进先出(FIFO,First In First Out)
六、队列的实现
 队列的一些常用操作
  创建队列
  销毁队列
  清空队列
  进队列
  出队列
  获取队头元素
  获取队列的长度
队列的顺序存储实现
六、队列的实现
实现代码:附件中SeqQue文件夹
队列的链式存储实现
六、队列的实现
实现代码:附件中ListQue文件夹

队列的优化实现

 顺序队列
  线性表的第一个元素作为队头
  线性表的最后一个元素作为队尾
 入队的新元素是在线性表的最后,时间复杂度为O(1)
 出队时需要将后续的所有元素向前移动,时间复杂度O(n)
问题:如何将出队操作的时间复杂度降低到O(1)?
顺序队列的优化方案
 定义front使其始终代表队头的下标
  出队时将队头元素返回,且front++
 定义rear使其始终代表队尾下一个元素的下标
  入队时将新元素插入,且rear++
 没有必要只将下标为0的位置定义为队头
六、队列的实现
顺序队列的关键状态
 初始状态:length == 0, front == 0, rear == 0;
 空队列状态:length == 0, front == rear;
 满队列状态:length == capacity, front == rear;
循环使用队列中的空间
 入队:rear = (rear + 1) % capacity;
 出队:front = (front + 1) % capacity;
实现代码:附件中SeqQue_2文件夹
链式队列的瓶颈
 链式队列
  线性表的第一个元素作为队头
  线性表的最后一个元素作为队尾
 入队的新元素是在线性表的最后,时间复杂度为O(n)
 出队的元素即链表的第一个元素,时间复杂度O(1)
问题:如何将入队操作的时间复杂度降低到O(1)?
链式队列的优化方案
 定义rear指针始终指向链表中的最有一个元素
  入队时将新元素通过rear插入队尾,且将rear指向新元素
六、队列的实现
链式队列的关键状态
 空队列状态:front == NULL, rear == NULL;
关键操作
 入队:
  rear->next = node;
  rear = node;
  node->next = NULL;
 出队:
  front = front->next;
实现代码:附件中ListQue_2文件夹

队列的特别实现

栈与队列:用栈实现队列
六、队列的实现
实现思路
 准备两个栈用于实现队列:inStack和outStack
 当有新元素入队时:将其压入inStack中
 当需要出队时:
  当outStack为空时:
   1. 将inStack中的元素逐一弹出并压入outStack中
   2. 将outStack的栈顶元素弹出
  当outStack不为空时:
   – 直接将outStack的栈顶元素弹出
算法框架
六、队列的实现
实现代码:附件中NewQue文件夹

附件

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI