队列(3.0笔记)
1、定义:
Queue)是插入和删除操作在线性表的两端进行,一端允许插入操作,而另一端只允许删除操作,允许插入的一端称为队尾(Rear),允许删除的另一端则称为队头(Front)。队列的插入操作通常称为入队或进队,删除操作通常称为出队。如果队列中没有元素,则称为空队列。

队列抽象数据类型

//其中T表示队列中数据的类型
public interface Queue<T> {public void enqueue(T t);  //元素入队,在队尾插入元素Tpublic T dequeue();       //元素出队,队头元素出队public T peek();          //取队头元素值,但队头元素不出队public boolean isEmpty();  //判断队列是否为空
}
队列的插入和删除操作在两端进行,使用队头指针(front)和
队尾指针(rear)表示队列的操作的两端。
队列的基本操作主要有创建队列、入队、出队、取队头元素、
判断队列是否为空等。

2、队列的顺序存储称为顺序队列(Sequential Queue):
顺序队列用一个一维数组存放元素数据,用两个变量front和rear,分别表示队头和队尾的位置。

public class SeqQueue<T> implements Queue<T> {private T[] queue=null;  //声明一维数组,存储队列元素private int length;      //数组的大小,表示队列的最大容量 private int front;       //表示队头位置private int rear;        //表示队尾位置//实现队列接口的相关方法……
}

3、顺序循坏队列

3.01、定义:顺序循环队列是将顺序队列设计成逻辑上头尾相接的循环结构

3.02、表达式:
入队操作时改变rear值,计算表达式为:rear=(rear+1)%length
入队操作时改变rear值,计算表达式为:rear=(rear+1)%length

3.03对空和队满判断
约定队列中预留一个空位,在队头位置和队尾位置相差为1时,即认为队列已满,此时队满条件为:front=(rear+1)% length,队列中最多放length-1个元素。


3.04、入队的操作

//元素入队
@Override
public void enqueue(T t) {//判断队列是否满,若已满,则抛出异常,若未满,队尾位置向前移动1,插入元素if(front==(rear+1) % length) {throw new RuntimeException("队列已满,元素不能入队");}else {rear=(rear+1)%length;queue[rear]=t;}
}

3.05、出队的操作

//元素出队
@Override
public T dequeue() {//判断队列是否空,若为空,抛出异常,若不为空,队头位置向前移动1,取出元素if(isEmpty()) {throw new RuntimeException("队列空,没有元素出队");}else {front=(front+1) %length;T t=queue[front];queue[front]=null;return t;}
}
//时间复杂度为O(1)

3.06、取头元素

@Override
public T peek() {//判断队列是否空,若为空,抛出异常,若不为空,直接取出队头元素if(isEmpty()) {throw new RuntimeException("队列空,没有元素获取");}else {return queue[front+1];    //直接将队头元素取出}
}

注意:获取队头元素和出队操作的区别在于,队头位置不移动

3.07、判断队列是否为空

@Override
public T peek() {//判断队列是否空,若为空,抛出异常,若不为空,直接取出队头元素if(isEmpty()) {throw new RuntimeException("队列空,没有元素获取");}else {return queue[front+1];    //直接将队头元素取出}
}

如有不对请指正!

数据结构队列顺序循环队列、加入、删除、取头元素相关推荐

  1. 数据结构之顺序循环队列

    顺序循环队列 思维导图: 队列的定义: 队列的特点 队列的基本操作: 顺序循环队列基本操作的实现: 情况一:rear和front指向同一位置时 队列定义: 队列初始化: 入队: 出队: 队列判空: 返 ...

  2. 【数据结构】顺序循环队列及其实现(C语言)

    给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置.为了有效地利用空间,引 ...

  3. 数据结构与算法 | 循环队列

    循环队列 实际中我们还会用到一种队列叫做循环队列,这种队列把存储空间前后连接起来,形成像环一样的结构,解决了内存空间浪费的问题 这里我们用顺序结构来实现,因为为了防止溢出的情况,这里我们需要多开一个数 ...

  4. 数据结构之——队列与循环队列

    数据结构学习之--队列与循环队列 什么是队列(Queue) 队列基于动态数组的实现及时间复杂度分析 优化队列 循环队列(LoopQueue) 什么是队列(Queue) 队列(Queue)同栈(stac ...

  5. 数据结构-队列之循环队列

    将顺序队列臆造为一个环状的空间,即把存储队列元素的表从逻辑上看成一个环,称为循环队列. 当队首指针q.front=MaxSize-1后,再前进一个位置就自动归0,可以通过除法取余运算(%)来实现. 初 ...

  6. 顺序队列,循环队列,链队列

    队列 先看队列接口和结点类 1. 顺序队列 2. 循环队列 3. 链队列 先看队列接口和结点类 package com.lovely.queue;/** * 2020年4月26日下午2:42:44* ...

  7. 《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列

    队列(Queue) 队列 Queue 队列的接口设计 队列源码 双端队列 Deque 双端队列接口设计 双端队列源码 循环队列 Circle Queue 循环队列实现 索引映射封装 循环队列 – %运 ...

  8. java循环队列_Java版-数据结构-队列(循环队列)

    前情回顾 在上一篇,笔者给大家介绍了数组队列,并且在文末提出了数组队列实现上的劣势,以及带来的性能问题(因为数组队列,在出队的时候,我们往往要将数组中的元素往前挪动一个位置,这个动作的时间复杂度O(n ...

  9. 数据结构 - 队列 环形队列(循环队列)

    文章目录 队列介绍 数组模拟队列设计思路 数组模拟队列代码实现 环形队列相关知识说明 队列长度公式推导 数组模拟环形队列代码实现 队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出 ...

  10. 三星手机电池循环清零代码_数据结构(C语言)-循环队列基本操作

    队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构. 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列 ...

最新文章

  1. C#表达式,类型和变量
  2. java搜索文件夹中文件是否存在_java中判断文件文件夹是否存在的方法(附代码)...
  3. 5G NGC — AF 的 Service information
  4. 3、4TP之url和路由
  5. m3u8地址_「波波带你手动提取网页视频」04讲 Network和Elements提取m3u8链接
  6. CSS 图片上下部与边框有间隙
  7. 修改centos6.5的时区
  8. 天气实况、天气预报、免费天气接口、空气质量各类天气数据、生活指数、气候数据雷达云图等值面...
  9. 90%人不知道的大厂面试流程和技巧
  10. 甲骨文裁员,这是一个危险信号
  11. CopyOnWriteArrayList 有什么特点?
  12. FPGA开发板学习(1)
  13. 针对Mrpt/build中的make时u出现的问题ccache: error: Failed to create temporary file for /home/jyy/.ccache/tmp/tm
  14. 郁闷,做了很多无用功
  15. [转载]创业者的N种死法
  16. SQL数据库中的一列数据按照英文字母先后顺序排列,怎么可以做到?
  17. 爱因斯坦的题目:在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶.....................
  18. 武汉大学计算机学院学生工作处,学生工作部
  19. 深度剖析 | 团贷网之死,高利贷团灭简史
  20. 车牌识别系统不能连接服务器,详解车牌识别系统安装及故障处理方法

热门文章

  1. 计算机顶级会议Rankings 英文投稿的一点经验
  2. python怎么算反三角函数_反三角函数怎么算
  3. 什么是python基础语法?一篇文章让你更加了解python
  4. SAP 全线产品大解析!
  5. 动态域名解析ipv6 群辉dnspod_群晖设置ipv6动态域名
  6. 用VMware克隆CentOS 6.4后HWaddr和UUID的设置
  7. ES6--Reflect
  8. 5G学习之路——认识CU、DU
  9. 超详细软件工程黑书思维导图(从第一章到第八章)
  10. 拍拍熊(APT-C-37),诱导方式、DNS、安卓远控