精华内容
下载资源
问答
  • 循环队列判断队满空的条件

    千次阅读 2019-10-15 15:34:21
    循环队列判断队满空的条件 队满:front=(rear+1)%size ; 空:front = rear&&

    标循环队列判断队满和队空的条件

    队满:front=(rear+1)%size ;
    队空:front = rear&&
    在这里插入图片描述
    图片上的信息来自王红梅教授版数据结构第二版

    展开全文
  • 循环队列判断队满

    万次阅读 多人点赞 2016-04-02 11:16:38
    在引用循环队列前,我们需要了解队列是如何线性实现的。 简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾...我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是空还是队满。为了

    在引用循环队列前,我们需要了解队列是如何线性实现的。
    这里写图片描述
    简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会发现一个问题,如上面的第四个图,0,1,2三个空间并没有使用。因此,为了占用该空间,我们使用了循环队列来实现。
    循环队列原理图:
    这里写图片描述
    我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队满。为了达到判断队列状态的目的,可以通过牺牲一个存储空间来实现。
    如上图d2所示,
    队头指针在队尾指针的下一位置时,队满。 Q.front == (Q.rear + 1) % MAXSIZE 因为队头指针可能又重新从0位置开始,而此时队尾指针是MAXSIZE - 1,所以需要求余。
    当队头和队尾指针在同一位置时,队空。 Q.front == Q.rear;

    以下是实现的代码:

    #include <stdio.h>
    #include <malloc.h>
    #define MAXSIZE 100  //最大队列长度
    #define OK 1
    #define ERROR 0
    typedef int ElemType;
    typedef int Status;
    
    typedef struct {
        ElemType *base;  //队列空间
        int front;   //队头指针
        int rear;       //队尾指针,若队尾不为空,则指向队尾元素的下一个位置
    }SqQueue;
    
    //初始化循环队列
    Status initQueue(SqQueue &Q) {
        Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType));  //申请空间
        Q.front = Q.rear = 0;       //队空
        return OK;
    }
    
    //入队
    Status enQueue(SqQueue &Q, ElemType e) {
        if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //队满,无法添加
        Q.base[Q.rear] = e;  //插入元素
        Q.rear =  (Q.rear + 1) % MAXSIZE; //队尾指针+1
        return OK;
    }
    
    //出队
    Status deQueue(SqQueue &Q, ElemType &e) {
        if (Q.front == Q.rear) return ERROR; //队空,无法删除
        e = Q.base[Q.front];
        Q.front = (Q.front + 1) % MAXSIZE;  //队头指针+1
        return OK;
    }
    
    //返回队列长度
    Status length(SqQueue &Q) {
        return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; 
    }
    
    展开全文
  • 在引用循环队列前,我们需要了解队列是如何线性实现的。 简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,...我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是空还是队满

    在引用循环队列前,我们需要了解队列是如何线性实现的。
    这里写图片描述
    简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会发现一个问题,如上面的第四个图,0,1,2三个空间并没有使用。因此,为了占用该空间,我们使用了循环队列来实现。
    循环队列原理图:
    这里写图片描述
    我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队满。为了达到判断队列状态的目的,可以通过牺牲一个存储空间来实现。
    如上图d2所示,
    队头指针在队尾指针的下一位置时,队满。 Q.front == (Q.rear + 1) % MAXSIZE 因为队头指针可能又重新从0位置开始,而此时队尾指针是MAXSIZE - 1,所以需要求余。
    当队头和队尾指针在同一位置时,队空。 Q.front == Q.rear;

    以下是实现的代码:

    #include <stdio.h>
    #include <malloc.h>
    
    展开全文
  • 在引用循环队列前,我们需要了解队列是如何线性实现的。    (纠错:上图中出队列应该是:x=sq[front++])简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会...

    转载自:http://blog.csdn.net/u010429311/article/details/51043149

    在引用循环队列前,我们需要了解队列是如何线性实现的。 
    这里写图片描述 
    纠错:上图中出队列应该是:x=sq[front++])简单地讲,便是当队列为空时,front = rear = 0,每当插入元素尾指针+1,删除元素是头指针-1。但是,我们会发现一个问题,如上面的第四个图,0,1,2三个空间并没有使用。因此,为了占用该空间,我们使用了循环队列来实现。 
    循环队列原理图: 
    这里写图片描述 
    我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是队空还是队满。为了达到判断队列状态的目的,可以通过牺牲一个存储空间来实现。 
    如上图d2所示, 
    队头指针在队尾指针的下一位置时,队满。 Q.front == (Q.rear + 1) % MAXSIZE 因为队头指针可能又重新从0位置开始,而此时队尾指针是MAXSIZE - 1,所以需要求余。 
    当队头和队尾指针在同一位置时,队空。 Q.front == Q.rear;

    以下是实现的代码:

    #include <stdio.h>
    #include <malloc.h>
    #define MAXSIZE 100  //最大队列长度
    #define OK 1
    #define ERROR 0
    typedef int ElemType;
    typedef int Status;
    
    typedef struct {
        ElemType *base;  //队列空间
        int front;   //队头指针
        int rear;       //队尾指针,若队尾不为空,则指向队尾元素的下一个位置
    }SqQueue;
    
    //初始化循环队列
    Status initQueue(SqQueue &Q) {
        Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType));  //申请空间
        Q.front = Q.rear = 0;       //队空
        return OK;
    }
    
    //入队
    Status enQueue(SqQueue &Q, ElemType e) {
        if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //队满,无法添加
        Q.base[Q.rear] = e;  //插入元素
        Q.rear =  (Q.rear + 1) % MAXSIZE; //队尾指针+1
        return OK;
    }
    
    //出队
    Status deQueue(SqQueue &Q, ElemType &e) {
        if (Q.front == Q.rear) return ERROR; //队空,无法删除
        e = Q.base[Q.front];
        Q.front = (Q.front + 1) % MAXSIZE;  //队头指针+1
        return OK;
    }
    
    //返回队列长度
    Status length(SqQueue &Q) {
        return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; 
    }
    
    展开全文
  • 环形队列判断队满

    2020-12-28 17:47:49
    在引用循环队列前,我们需要了解队列是如何...我们可以发现,当循环队列属于上图的d1情况时,是无法判断当前状态是空还是队满。为了达到判断队列状态的目的,可以通过牺牲一个存储空间来实现。 如上图d2所示,
  • front表示头指针(指向队列内首元素) rear表示队尾指针(指向队列内尾元素的下一个位置) m表示队列的容量 空:front=rear ...队满:front=(rear+1)%m 队列内元素个数:(rear - front + m) % m ...
  • 循环队列队满判断

    万次阅读 2018-03-23 21:06:28
    第一种方法是设置一个标志量flag,当front==rear且flag=0时为空,当front==rear且flag=1时列为;第二种方法是我们修改条件,保留一个元素空间,也就是说,数组中还有一个空闲单元时,我们就认为这个队列已经了...
  • 循环队列处理队满空的方式 顺序存储的队列在队满时再进出现的溢出往往是假溢出,即还有空间但用不上,为了有效利用队列空间,可将队列元素存放数组首尾相接,形成循环队列。 但是构造循环队列时不得不考虑到...
  • 循环队列判断满与空

    千次阅读 2013-09-22 00:08:32
    因此,我们无法通过front=rear来判断队列“空”还是“”。 注:先进入的为‘头’,后进入的为‘尾’。 解决此问题的方法至少有三种: 其一是另设一个布尔变量以匹别队列的空和; 其二是少用一个元素...
  • C语言之循环队列判断满与空

    千次阅读 2017-03-23 08:23:54
    因此,我们无法通过front=rear来判断队列“空”还是“”。 注:先进入的为‘头’,后进入的为‘尾’。 解决此问题的方法至少有三种: 其一是另设一个布尔变量以匹别队列的空和; 其二是少用一个元素的空间,约定...
  • 循环队列判断满空的两种方法(C#)

    千次阅读 2019-10-20 20:06:46
    如果进元素的速度快于出元素的速度,队尾指针很快就赶上了首指针,此时可以看出循环队列队满条件也为 rearfront。怎样区分这两者之间的差别呢? 解决方案: 方法一:把数组的前端和后端连接起来,形成一个...
  • 循环队列满队条件

    千次阅读 2016-09-03 19:25:37
    意思就是说,循环队列留了一个元素空间,即当maxsize=100的时候,实际能存的数据只有99个,留一个不存的目的就是用来区分队列空还是。因为空的时候q.rear=q.front,而的时候就变成了(q.rear+
  • 循环队列设置tag标志域判断满队空 算法思想: tag等于0的情况下,若因删除导致Q.Rear==Q.Front则为队空 tag等于1的情况下,若因插入导致Q.Rear==Q.Front则为队满 核心代码: //tag等于0的情况下,若因删除...
  • 队列: front -1 = rear 循环队列(n为队列长度): front = (rear + 1) % n
  • 循环队列实现(通过设置标志位tag位判断空队满队)
  • 判断循环队列满

    千次阅读 2017-02-22 17:10:08
    判断队列满: (rear+1)%maxsize=front   往往很多人,像我一样,未能很好的理解这个表达式。 front(读起始位置)和rear(写起始位置)如上图位置: rear移动一步的偏移位置(相对队列起始位置0)是n=(rear+1)%...
  • 循环队列判断队列空和的3种方法

    千次阅读 多人点赞 2020-02-14 19:32:18
      一.少用一个存储位置   第一种情况: ...比如下图有下标了,当队列满时,显然条件就不能判断了,就要用到另一种判断。   第二种情况: 当列为空时条件:rear == front 当队列满时条件为:(rear+1)...
  • 我现在介绍的循环队列判断满空的三种方法分别是:1.设标志位法 2.预留一位法; 3.预存长度法(顾名思义,很简单) 1.设标志位法 思路:预设一个标志,tag,初值=0,每当入队成功,tag=1;每当出成功,tag=...
  • 循环队列空与队满的条件

    千次阅读 2014-07-19 00:29:15
     因此只凭等式front=rear无法判断队空还是队满。 有两种方法处理上述问题:  (1)另设一个标志位以区别队列是空还是。  (2)少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位
  • 判断循环队列还是空

    千次阅读 2013-10-28 00:06:20
    判断一个循环队列还是空的方法: 方法一:设置一个标志tag,当每一次入队的时候,令tag = 1;当出的时候,tag = 0;所以,如果在tag = 1后,Q.front = Q.rare,则说明是因为插队而引起的,所以是因为队列了;...
  • 队列满时:(rear+1)%maxSize= =front 不少一个存储位置时:加一个标志flag或者计数的count 入队时flag=true 出时flag=false 队满:rear= =front&flag 空:rear= =front&!flag 开始时count=0 入队时:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 205,442
精华内容 82,176
关键字:

循环队列判断队满