首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

队列基本操作(顺序队列、循环队列、链式队列

允许插入一端称为队尾,允许删除一端称为队头。 队列基本操作包括: 初始化队列:InitQueue(Q) 操作前提:Q为未初始化队列。...入队操作:EnterQueue(Q,data) 操作前提:队列Q已经存在。 操作结果:在队列Q队尾插入data。...出队操作:DeleteQueue(Q,&data) 操作前提:队列Q已经存在且非空。 操作结果:将队列Q队头元素出队,并使用data带回出队元素值。...使用顺序队列由于在操作时会出现“假溢出现象”,所以可以使用顺序循环队列合理使用队列空间。...---- 队列链式存储结构简称为链式队列,它是限制仅在表头进行删除操作和表尾进行插入操作单链表。链队操作实际上是单链表操作,只不过是出队在表头进行,入队在表尾进行。

2.8K50

队列基本操作

这一章我们来看队列 队列概念: 队列是一种特殊线性表,特殊之处在于它只允许在表前端(front)进行删除操作,而在表后端(rear)进行插入操作,和栈一样,队列是一种操作受限制线性表。...进行插入操作端称为队尾,进行删除操作端称为队头。 其实我们来对比栈,栈特点是只能在一端进行操作,而队列是一端插入一端删除。...用一句很有歧义却很形象的话来讲两者区别就是:栈就是插进去抽出来,而队列是插进去吐出来。 我们还是上图来更加直观队列 队列分为两种,一种是顺序队列,一种是循环队列。...其实从存储结构上讲,队列也分为两种,一种是顺序队列,一种是链队列。 如果从存储上加以区分的话,在实际物理空间中,数据集中存储队列是顺序队列,分散存储队列是链队列。...我们来看顺序表实现队列操作 上代码: 我们这样实现就很简单,避免了使用结构体 #include int PushQueue(int *a,int rear,int data){

34530
您找到你想要的搜索结果了吗?
是的
没有找到

队列基础操作

队列是一种特殊线性表,只允许在表前端进行删除操作,而在表后端进行插入操作,和栈一样,队列是一种操作受限制线性表。进行插入操作端称为队尾,进行删除操作端称为队头。...struct queue { int inner; }Queue; Queue a[SIZE]; Queue *head = NULL; Queue *tail = NULL; /*(1)初始化队列...操作结果:构造了一个空队; (2)入队操作: In_Queue(Queue *q, int x),初始条件: 队q 存在。...操作结果: 对已存在队列q,插入一个元素x 到队尾,队发生变化; (3)出队操作: Out_Queue(Queue *q),初始条件: 队q 存在且非空,操作结果: 删除队首元素,并返回其值,队发生变化...存在,操作结果: 若q 为空队则返回为1,否则返回为0。

27210

java 队列使用

java 队列使用 在Java并发包中已经提供了BlockingQueue...BlockingQueue 队列常用操作方法:       1.往队列中添加元素: add(), put(), offer()       2.从队列中取出或者删除元素: remove() element...()  peek()   poll()  take() 每个方法说明如下: offer()方法往队列添加元素如果队列已满直接返回false,队列未满则直接插入并返回true; add()方法是对offer...()方法简单封装.如果队列已满,抛出异常new IllegalStateException("Queue full"); put()方法往队列里插入元素,如果队列已经满,则会一直等待直到队列为空插入新元素...,返回null; take()方法取出并删除队头元素,当队列为空,则会一直等待直到队列有新元素可以取出,或者线程被中断抛出异常;offer()方法一般跟pool()方法相对应, put()方法一般跟

43630

java 优先级队列_JAVA 队列

PriorityQueue类在Java1.5中引入并作为 Java Collections Framework 一部分。...PriorityQueue是基于优先堆一个无界队列,这个优先队列元素可以默认自然排序或者通过提供Comparator(比较器)在队列实例化时排序。...优先队列要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中元素。 优先队列头是基于自然排序或者Comparator排序最小元素。...如果有多个对象拥有同样排序,那么就可能随机地取其中任意一个。当我们获取队列时,返回队列头对象。 优先队列大小是不受限制,但在创建时可以指定初始大小。...PriorityQueue是非线程安全,所以Java提供了PriorityBlockingQueue(实现BlockingQueue接口)用于Java多线程环境。

49910

Java队列

大家好,又见面了,我是你们朋友全栈君。 从初学者角度,认真地学习Java队列使用和设计。...该队列对元素FIFO(先进先出)进行排序。队列开头是已在队列中停留最长时间元素。队列尾部是最短时间位于队列元素。新元素插入到队列尾部,并且队列检索操作队列开头获取元素。...这是经典“有界缓冲区”,其中固定大小数组包含由生产者插入并由消费者提取元素。创建后,容量将无法更改。试图将一个元素放入一个完整队列将导致操作阻塞(put方法)。...LinkedBlockingQueue 链表组成有界阻塞队列,内部使用两个可冲入锁, put操作可重入锁, take操作可冲入锁, 以及两个锁上相应Condition。...LinkedTransferQueue 无界阻塞队列 Java 并发 — 阻塞队列之LinkedTransferQueue源码分析 LinkedBlockingQueue 链表结构双向阻塞队列

63110

C语言队列基本操作

本篇介绍一下编程中比较重要一个数据结构队列队列有个很显著标志,对其中数据是先进先出,如果是顺序存储结构可以说就是一个受限数组,对链式存储结构就只能说是符合先进先出规则了,这种数据结构在我们真正编程中还是相当常用...实际中根据需要去定制自己队列。...开始 顺序队列操作 首先我们来介绍一下顺序存储结构下队列定义和基本操作 添加适当头文件,定义一个顺序存储数据结构, 这里需要添加头文件和定义一个队列顺序数据结构 #include <stdio.h...,在顺序队列中,可以从数组方式去理解,这样将会让你理解起来更简单 链式队列操作 首先我们来介绍一下顺序存储结构下队列定义和基本操作 添加适当头文件,定义一个队列链式存储数据结构, 这里需要添加头文件和定义一个队列链式存储数据结构...,只要理解了先进先出逻辑,和了解一下指针操作就可以很容易写出队列节本操作

74131

java队列

Java 实现队列 介绍 队列为特殊线性表,队列特点先进先出(FIFO),队列插入为入队,队列删除为出对。 Java 实现 这次使用顺序队列实现。(使用数组), why?...为什么不直接使用顺序表作为底层容器,因为入队操作执行顺序表尾插入,时间复杂度为O(1) O(1) 普通语句,相互操作,时间复杂度为O(1) 出对操作执行表头删除操作,时间复杂度为O(n),因为涉及到一个循环遍历...即front和rear两个解决 时间复杂度 O(n) 涉及一层循环,此时时间复杂度为O(n) 又因为直接更改下标,会导致空间浪费,(出队操作)此时,为了减少空间浪费,将队列设计为循环队列,目的,避免假满现象出现...offer 入队,和add方法不同是,如果队满,或传入为空,将会抛出错误,不会自动扩充 boolean offer(T data); // 返回队头元素,不执行删除操作,为空 返回null...抛出异常 T remove(); // 清空队列 void cleameQueue(); } 实现接口类 package demo.mingm.struct.queue; import java.util.Arrays

95900

java阻塞队列

阻塞队列 阻塞队列 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作队列。这两个附加操作是:在队列为空时,获取元素线程会等待队列变为非空。...当队列满时,存储元素线程会等待队列可用。阻塞队列常用于生产者和消费者场景,生产者是往队列里添加元素线程,消费者是从队列里拿元素线程。...默认情况下不保证访问者公平访问队列, 所谓公平访问队列是指阻塞所有生产者线程或消费者线程,当队列可用时,可以按照阻塞先后顺序访问队列,即先阻塞生产者线程,可以先往队列里插入元素,先阻塞消费者线程...SynchronousQueue SynchronousQueue是一个不存储元素阻塞队列。每一个put操作必须等待一个take操作,否则不能继续添加元素。...双端队列因为多了一个操作队列入口,在多线程同时入队时,也就减少了一半竞争。

85320

Java 循环队列实现

队列概念   队列(Queue)是限定只能在一端插入、另一端删除线性表。允许删除一端叫做队头(front),允许插入一端叫做队尾(rear),没有元素队列称为“空队列”。   ...队列具有先进先出(FIFO)特性。   普通顺序队列存在问题     在普通顺序队列中,入队操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位。...像这样进行了一定数量入队和出队操作后,可能会出现这样情况:     尾指针rear已指到数组最后有一个元素,即rear==MaxLen-1,此时若再数组前面部分可能还有很多闲置空间,即这种溢出并非是真的没有可用存储空间...显然,必须要解决这一块假溢出问题,否则顺序队列就没有太多使用价值。   循环队列     循环队列存储结构,头、尾指针都和普通顺序队列相同。...不同只是将队列视为“环状结构”,即data[0]为紧接着data[MaxLen-1]单元,为相邻元素,首位成为一个环。结构如下: ?

1.4K30

Java阻塞队列

一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除附加方法队列。 1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。...:支持优先级排序无界阻塞队列 DelayQueue:使用优先级队列实现无界阻塞队列 SynchronousQueue:不存储元素阻塞队列 LinkedTransferQueue:由链表结构组成无界阻塞队列...LinkedBlockingDeque:由链表结构组成双向阻塞队列 三丶阻塞队列实现原理 介绍过阻塞队列后博主想到第一个应用就是生产者和消费者场景,阻塞队列是如何实现,那我们可以想象一下用一般多线程是如何实现生产者和消费者场景...java.io.Serializable { ...... } public boolean add(E e) { return super.add(e); } 这个直接继承了父类...enqueue方法进行入队操作,虽然这个时候我们还没看见Condition,但是我们已经看见了ReentrantLock了不是吗?

86460
领券