zoukankan      html  css  js  c++  java
  • 循环队列

    循环队列是队列的一种顺序表示和实现的方法。

    与顺序栈类似,在队列的顺序存储结构中,用一组地址连续的存储单元依次存放从队头到队尾的元素,如一维数组Queue[MAXSIZE]。

    此外,由于队列中队头和队尾的位置都是动态变化的,因此需要附设俩个指针front和rear,分别指示队头元素和为元素在数组中的位置。

    初始化时,令front=rear=0;

    入队时,直接将新元素送入尾指针rear所指的单元,然后尾指针增1;

    出队时,直接取出队头指针front所指的元素,然后头指针增1。

    显然,在非空顺序队列中,rear==MAZSIZE时认为队满,但是可能由于之前的操作,有一部分数据进行了出队操作,

    从而使front后移,将之前的存储空间空余出来。这种现象叫做假溢出。

    为了解决这个问题,引入循环队列这个概念,即当rear==MAXSIZE之后,再入队时,就应该入的顺序存储空间位置0的位置,

    这样就可达到队列空间的充分利用,此时判断队列是否已满的依据是 rear-front==MAXSIZE。

    实现这种结构的方法是,通过模运算,

        队尾进队时,队尾指针变化:rear = (rear+1)%MAXSIZE,

        队头出队时,队头指针变化:front = (front+1)%MAXSIZE

    此时,循序队列判空就不能再以简单的 rear==front 来判断了,循环队列的判空有俩种方法:

        第一种:损失一个存储单元,当队尾指针所指向的空单元的后继单元是队头元素所在的单元时,则停止入队。

            这样一来,队尾指针永远追不上队头指针,所以队满时 不会有 rear == front,

            此时的判满条件是 (rear+1)%MAXSIZE == front;

            判空条件仍为 rear == front。

        第二种:增设一个标志量tag,tag==0时表示队空,tag==1时表示队满,此方法不损失存储空间。

  • 相关阅读:
    Coalesce (MS SQL Server)——取指定内容(列)中第一个不为空的值
    SQL 函数NULLIF、NULL、ISNULL、COALESCE、IIF
    oracle 分组后取每组第一条数据
    oracle判断是否包含字符串的方法
    Oracle 查询字段不包含多个字符串方法
    [oracle] to_date() 与 to_char() 日期和字符串转换
    Oracle中保留两位小数
    Oracle 树操作、递归查询(select…start with…connect by…prior)
    联合查询更新表数据
    WCF 之 生成元数据和代理
  • 原文地址:https://www.cnblogs.com/xxdfly/p/4384480.html
Copyright © 2011-2022 走看看