精华内容
下载资源
问答
  • 数据结构中的队列

    2018-02-06 17:11:44
    允许插入的一端称为队尾,允许删除的一端称为队头。 2.队列的抽象数据类型 关于队列的操作有: (1) InitQueue(*Q):初始化操作,建立一个共队列Q (2) QueueEmpty(*Q):判断队列是否为空 (3) EnQueue(*Q,e):...
    1.队列的定义
    队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的线性表。允许插入的一端称为队尾,允许删除的一端称为队头。

    2.队列的抽象数据类型
    关于队列的操作有:
    (1) InitQueue(*Q):初始化操作,建立一个共队列Q
    (2) QueueEmpty(*Q):判断队列是否为空
    (3) EnQueue(*Q,e):插入新元素到队列中并成为队尾元素
    (4) QueueLength(Q):返回队列的个数
    (5) GetHead(Q,*e):获取队列队头元素
    (6) DeQueue(*Q,*e):删除队列中的队头元素
    (7) ClearQueue(*Q):清空队列
    (8) DestroyQueue(*Q):若队列存在,则销毁它

    3.顺序队列中的溢出现象:
    (1) "下溢"现象:当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。
    (2)"真上溢"现象:当队列满时,做进栈运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。
    (3)"假上溢"现象:由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为"假上溢"现象。

    4.循环队列定义
    解决假溢出的办法是后面的满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。

    5.队列长度计算公式
    引入两个指针,front指针指向队头元素,rear指针指向队尾元素的下一个位置。队列的最大尺寸为QueueSize,队列满的条件是(rear+1)%QueueSize == front。通用的计算队列长度的公式为:(rear-front+QueueSize)%QueueSize。


    6.循环队列的初始化代码
    Status InitQueue(SqQueue *Q)
    {
    Q -> front = 0;
    Q -> rear = 0;
    return OK;
    }
    循环队列求长度代码
    int QueueLength(SqQueue Q)
    {
    return ( Q.rear - Q.front + MAXSIZE) % MAXSIZE;
    }
     

    7.循环队列的入队操作代码
    Status EnQueue (SqQueue * Q, QElemType e)
    {
    if ( ( Q -> rear + 1) % MAXSIZE == Q -> front) //队列满的判断
    return ERROR;
    Q -> data[Q -> rear] = e;
    Q -> rear = (Q -> rear +1) %MAXSIZE;  //rear指针向后移一位
    return OK;
    }
     

    8.循环队列出队操作代码:
    Status DeQueue( SqQueue *Q, QElemType *e)
    {
    if( Q -> front == Q -> rear) //队列空的判断
    return ERROR; 
    *e = Q -> data[Q -> front];
    Q -> front = (Q -> front + 1) % MAXSIZE;
    return OK;
    }


    9.队列的链式存储结构定义
    队列的链式存储结构,就是线性表的单链表,不过它只能尾进头出,简称为链队列。为了方便操作,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点。


    10. 循环队列和链队列的比较
    从时间上,它们的基本操作都是常数时间O(1),不过循环队列是事先申请好空间,使用期间不释放;对于链队列来说,每次申请和释放结点也会存在一些时间开销,如果入队出队频繁,则两者还是有细微差异。队于空间上来说,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间的浪费。链队列则不存在这个问题,尽管它需要一个指针域,会产生一些空间上的开销,但可以接受。所以在空间上,链队列更加灵活。
    总的来说,在可以确定队列最大值的情况下,建议用循环队列,如果无法预估队列的长度时,则用链队列。
    展开全文
  • 队列

    2015-03-30 01:15:50
    队列允许插入操作的一端称为队尾,允许进行删除操作的一端称为对头。队列的插入操作通常称为入队列队列删除操作通常称为出队列。 因为队列允许在一端插入,另一端删除,所以只有最早进入队列的元素才能最先...

    队列(简称为队)也是一种特殊的线性表,队列的数据元素以及数据元素之间的操作与线性表完全相同,差别是线性表允许在任意位置插入和删除,而队列只允许在一端进行插入操作而在另一端进行删除操作。队列允许插入操作的一端称为队尾,允许进行删除操作的一端称为对头。队列的插入操作通常称为入队列,队列的删除操作通常称为出队列。

    因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,因此队列也被称为先进先出表。比方说,大家在食堂排队买饭时,只有最早来排队的,即最先入队列的,才能最先买到饭,即最先出队列。

    展开全文
  • 其两头都有限制,插入只能表的一端进行(只进不出),而删除只能表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front)。先进先出(FirstIn First Out),FIFO2、栈:栈是一种...

    (一)队列和栈的区别

    1、队列:

    队列是一种特殊的线性表。其两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front)。

    先进先出(First In First Out),FIFO

    2、栈:

    栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。

    后进先出(Last In First Out),LIFO

    3、其他:

    队列是线程间最常用的交换数据的形式。

    在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。

    (二)队列和栈的方法小结

    Queue.Queue(maxsize=0)       创建队列,FIFO, 如果maxsize小于1就表示队列长度无限。

    Queue.LifoQueue(maxsize=0)    创建栈,LIFO, 如果maxsize小于1就表示队列长度无限。

    Queue.qsize()    返回队列的大小

    Queue.empty()  如果队列为空,返回True,反之False

    Queue.full()       如果队列满了,返回True,反之False

    Queue.get([block[, timeout]])          出队,读队列,timeout等待时间。非阻塞get_nowait(),相当于get(block=False)

    Queue.put(item, [block[, timeout]]) 入队,写队列,timeout等待时间。非阻塞put_nowait(),相当于put("xxx",block=False)

    Queue.queue.clear()    清空队列

    参考:

    (三)队列

    # from multiprocessing import Queue

    from queue import Queue

    # 创建一个长度为5的队列

    q = Queue(5)

    # 判队空

    print(q.empty())

    # 入队:向队列中添加元素

    q.put(1)

    q.put("abc")

    q.put([1, 2, 3])

    q.put({"a": 123})

    q.put((1, 2))

    # 判队满

    print(q.full())

    # 量队

    print(q.qsize())

    # 出队:从队列中取出元素

    print(q.get())

    print(q.get())

    print(q.get())

    print(q.get())

    print(q.get())

    # 判断队空

    print(q.empty())

    # 量队

    print(q.qsize())

    # 非阻塞入队

    q.put_nowait(6)

    # 非阻塞出队

    print(q.get_nowait())

    (四)栈

    from queue import LifoQueue

    # 定义一个5长度的栈

    s = LifoQueue(5)

    # 进栈:向栈中添加元素

    s.put(1)

    s.put(2)

    s.put(3)

    s.put(4)

    s.put(5)

    # 判栈满

    print(s.full())

    # 量栈

    print(s.qsize())

    # 退栈:从栈中取出元素

    print(s.get())

    print(s.get())

    print(s.get())

    print(s.get())

    print(s.get())

    # 判栈空

    print(s.empty())

    # 量栈

    print(s.qsize())

    展开全文
  • java中的队列

    2020-04-16 14:08:13
    插入的一端称为队尾,进行删除的一端称为队首。 队列的基本操作: 加入 offer()、获取队首元素peek()、删除后返回队首元素poll() java中队列相关的类和结构 image.png 没有实现阻塞接口的 PriorityQueue ...

    队列的定义和数据类型

    • 定义:队列,也叫先进先出表,是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。插入的一端称为队尾,进行删除的一端称为队首。
    • 队列的基本操作:

    加入 offer()、获取队首元素peek()、删除后返回队首元素poll()

    java中队列相关的类和结构

    image.png
    1. 没有实现阻塞接口的
    • PriorityQueue 类实质上维护了一个有序列表。加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)或者根据传递给构造函数的 java.util.Comparator 实现来定位。
    • ConcurrentLinkedQueue 是基于链接节点的、线程安全的队列。并发访问不需要同步。因为它在队列的尾部添加元素并从头部删除它们,所以只要不需要知道队列的大小。
    1. 实现阻塞接口
    • ArrayBlockingQueue :一个由数组支持的有界队列。
    • LinkedBlockingQueue * * 一个由链接节点支持的可选有界队列。
    • PriorityBlockingQueue一个由优先级堆支持的无界优先级队列。
    • DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
    • SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。

    add增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常

    remove移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

    element返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

    offer 添加一个元素并返回true 如果队列已满,则返回false

    poll移除并返问队列头部的元素 如果队列为空,则返回null

    peek返回队列头部的元素 如果队列为空,则返回null

    put 添加一个元素 如果队列满,则阻塞

    take 移除并返回队列头部的元素 如果队列为空,则阻塞

    展开全文
  • 队列的学习

    千次阅读 2012-10-28 16:45:27
    允许插入的一端叫做队尾(rear)允许删除的一端叫做队头(front)当队列中没有元素时叫做空队列队列是一种先进先出的线性表,也称为FIFO表 顺序队列 顺序队列 队列的顺序存储结构称为顺序队列,顺序...
  • 允许插入的一端称为队尾,允许删除的一端称为队头。 2. 队列的抽象数据类型 关于队列的操作有: (1) InitQueue(*Q):初始化操作,建立一个共队列Q (2) QueueEmpty(*Q):判断队列是否为空 (3) EnQueue(*Q,e):...
  • 允许插入的一端称为队头,允许删除的一端称为队尾.队头和队尾各用一个”指针”指示,称为队头指针和队尾指针.不含任何结点的队列称为”空队列”.队列的特点是结点在队列中的排队次序和出队次序按进队时间先后确定,即...
  • 允许插入的一端称为队尾,允许删除的一端称为队头。 3. 常见的队列操作有哪些? 答:创建队列,销毁队列,清空队列,进队列,出队列,获取队头元素,获取队列长度等。 4. 队列的抽象数据类型有哪些? 答:(1...
  • 链式队列的实现与项目中的应用

    千次阅读 2017-06-04 10:40:10
    在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许一端插入,在另一端删除,所以只有最早进入队列元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first ...
  • 队列(queue)是一种特殊的线性表,只允许在表的一端进行插入操作而另一端进行删除的线性表。进行插入操作的端称为队尾,进行删除操作的一端称为队头。队列中没有数据元素时称为空队列。 队列的操作是按照先进先...
  • 允许插入的一端称为队尾,允许删除的一端称为队头 它有两个基本操作: offer 在队列尾部加人一个元素 poll 从队列头部移除一个元素 Java 的队列可以利用实现 Deque 接口的类作为实现类, Deque 的...
  • 队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队头,假设队列是q=(a1, a2, a3, …, an),那么a1就是队头元素,an是队尾元素,我们需要进行删除操作时总是从a1开始,而an后进行插入...
  • 队列&循环队列的实现

    2019-03-15 20:48:46
    插入的一端称为队头,删除的一端称为队头。如下图所示: 顺序队列:将队列中的元素全部存入一个一维数组中,数组的低下标一端为队头,高下标一端为队列尾部,这样的队列称为顺序队列。顺序队列中,队列的存储空间...
  • 队列 队列 是一种特殊线性表,特殊之处在于它只允许在表...在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许一端插入,在另一端删除,所以只有最早进入队列元素才能最...
  • Java的中的栈和队列

    2019-12-09 17:57:45
    Java的的栈和队列栈...进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈: 栈的插入操作叫做进栈/压栈/入栈,入数据栈顶。 出栈: ...
  • 队列的定义 队列是另一种限定性的线性表,它只允许表的一端插入元素,而 另一端删除元素,...允许删除的一端称为队头(front)。 链队列的存储结构 typedef struct Node { QueueElementType data; /*数据域*...
  • 我们操作系统会遇到疑似死机后,你...允许插入的一端称为队尾,允许删除的一端称为队头。 一、链式队列 链式队列,类似于链表的一种队列,从空间上来说链式队列没有固定长度,比起顺序储存的循环队列来说,多了...
  • 队列的定义及其基本操作

    万次阅读 2016-12-20 23:52:44
    允许插入的一端称为队头,允许删除的一端称为队尾.队头和队尾各用一个”指针”指示,称为队头指针和队尾指针.不含任何结点的队列称为”空队列”.队列的特点是结点在队列中的排队次序和出队次序按进队
  • 数据结构——队列的详解

    千次阅读 多人点赞 2020-04-21 12:55:45
    队列和栈相反,队列(queue)是一种先进先出(FIFO:first in first out)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。...在队列中,允许插入的一端叫队尾(tear),允许删除的一端称为队头(front)
  • 队列是一种先进先出的线性表,允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。向队列中插入元素称为入队,从队列中删除元素称为出队。当队列中没有元素时称为空队列。队列的操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 889
精华内容 355
关键字:

在队列中允许删除的一端称为