数据结构-队列小结
数据结构之队列 对比学习法:通过对比A和B的不同和差异来学习A和B 前置知识 数组和链表的知识 1. 先进先出队列(FIFO QUEUE) 1.1 理论知识 只允许头出,尾进。像排队一样。 如果是先进后出.则是栈。 对数组和链表可以随机存取,对队列只能尾存头取,是随机存取的一个操作子集。所以,队列其实是数组和链表就可以实现 1.2 实现 基于数组实现: 数组头部移出,尾部插入,只需要一个数组和头尾两个指针即可实现。 效率: 头取效率 O(1) 尾存效率 O(1) 缺点: 假溢出: 数组长度有限,尾部不断添加,导致头部有大量空白的情况下,数组越界。 因此: 引入循环队列的概念。 基于链表实现: 链表本身就是队列的父集合,单向链表+头尾指针就可以实现队列,所以java中没有链表队列实现,直接链表就可以起到相同作用 效率: 头取效率 O(1) 尾存效率 O(1) 小结: 单向链表可以替代队列实现 数组实现有假溢出的问题。 2.循环队列 因为链表不存在容量问题,所以循环链表只针对数组实现 数组实现的先进先出链表存在假溢出问题,为了解决假溢出问题,提出循环链表概念。 1.头指针表示出队位置。 2.尾指针表示入队位置。 3.当尾指针达到数组最后的位置的时候,跳到数组开头的位置,头指针也相同处理。 缺点: 容量有限,和数组容量相同,如果队列同时容纳的人超过了数组长度,则首尾碰撞,出现异常。