精华内容
下载资源
问答
  • 优点: 相对于直线队列来讲,直线队列在元素出队后,头指针向后移动,导致删除元素后的空间无法在利用,即使元素个数小于空间...2、另设一个布尔变量以匹别队列空和满。 3、少用一个元素的空间,约定入队前,测...

    优点:

    相对于直线队列来讲,直线队列在元素出队后,头指针向后移动,导致删除元素后的空间无法在利用,即使元素个数小于空间大小,依然无法再进行插入,即所谓的“假上溢”。当变成循环队列之后,删除元素后的空间仍然可以利用,最大限度的利用空间。

    判断方式:

    1、采用计数器来判断,空时,计数器为0,满时,计数器为maxsize。
    2、另设一个布尔变量以匹别队列的空和满。
    3、少用一个元素的空间,约定入队前,测试尾指针+1后是否等于头指针,若相等则认为队满。(注意:rear所指的单元始终为空,如果用尾指针=头指针来判断的话,是不知道是空还是满的,因为空和满尾指针都等于头指针);

    在这里插入图片描述

    展开全文
  • 设立一个标志位,比如说是flag 最开始时队列为,设flag=0 当入队的时候让flag=1 出队的时候flag=0 然后再加上判断队头队尾指针是否重合 重合,且flag=0,则为 重合且flag=1,则为
    设立一个标志位,比如说是flag
    最开始时队列为空,设flag=0
    当入队的时候让flag=1
    出队的时候flag=0
    然后再加上判断队头队尾指针是否重合
    重合,且flag=0,则为空
    重合且flag=1,则为满
    展开全文
  • 循环队列_数组实现

    2017-09-30 17:43:00
    下面我们重点讨论一下循环队列如何判断空和满的问题? 我下面判断队列空和满是直接根据q->length属性来判断, 当q->length为0, 表示队列为空, 当q->length = maxSize - 1时, 队列为满. 由于...

    循环队列是指, 队尾指针走到末尾后, 还可以继续从头开始走.

    front指针仍然是指向第一个元素的前一个元素, rear指针指向最后一个元素.
    下面我们重点讨论一下循环队列如何判断空和满的问题?
    我下面判断队列空和满是直接根据q->length属性来判断, 当q->length为0,
    表示队列为空, 当q->length = maxSize - 1时, 队列为满. 由于遍历上的原因,
    队列的最大长度只能是数组最大长度-1.

    #include <stdio.h>
    #include <stdlib.h>
    
    struct queue {
        int* data;
        int front;
        int rear;
        int maxSize;
        int length;
    };
    typedef struct queue node;
    typedef struct queue* link;
    
    // 函数声明
    link createQueue (int maxSize);
    void printQueue (link q);
    int add (link q, int x);
    int del (link q);
    
    int main () {
        int i;
        int maxSize = 10; // 队列的最大长度
        link qhead = createQueue(maxSize);
    
        // 初始队列信息
        printQueue(qhead);
    
        // 基本入队测试
        for (i=1; i<=10; i++) {
            add(qhead, i * 2);
        }
        printQueue(qhead);
    
        // 基本出队测试
        del(qhead);
        del(qhead);
        del(qhead);
        del(qhead);
        printQueue(qhead);
    
        // 循环入队测试
        add(qhead, 100);
        add(qhead, 200);
        add(qhead, 300);
        add(qhead, 400);
        add(qhead, 500);
    
        printQueue(qhead);
        return 0;
    }
    
    // 创建空队列
    link createQueue (int maxSize) {
        link q;
        q = (node*)malloc(sizeof(node));
        q->data = (int*)malloc(sizeof(int) * maxSize);
        q->front = -1;
        q->rear = -1;
        q->length = 0;
        q->maxSize = maxSize;
        return q;
    }
    
    // 打印
    void printQueue (link q) {
        int i;
        printf("当前队列的信息如下: \n");
        printf("front = %d\n", q->front);
        printf("rear = %d\n", q->rear);
        printf("length = %d\n", q->length);
        printf("maxSize = %d\n", q->maxSize);
    
        // 打印队列中的数据
        if (q->length == 0) {
            printf("当前队列中没有数据\n");
        } else {
            printf("队列中的数据如下: \n");
            i = q->front;
            while (i != q->rear) {
                i = (i + 1) % q->maxSize;
                printf("%d %d\n", i, q->data[i]);
            }
        }
        printf("\n");
    }
    
    // 入队
    int add (link q, int x) {
        if (q->length == q->maxSize -1 ) {
            printf("队列已满, 不能入队\n");
            return 0;
        }
        q->rear = (q->rear + 1) % q->maxSize;
        q->data[q->rear] = x;
        q->length++;
        return 1;
    }
    
    // 出队
    // 错误返回0, 正确返回被出队元素的值
    int del (link q) {
        if (q->length == 0) {
            printf("队列为空, 不能出队\n");
            return 0;
        }
    
        q->front = (q->front + 1) % q->maxSize;
        q->length--;
        return q->data[q->front];
    }
    展开全文
  • 循环队列

    2019-10-08 09:51:16
    循环队列如何判断队列已或者? 使用一个length变量记录实际元素个数,就不用每次去计算head指针rear指针之间的关系来判断队列的状态。 package demo; import java.util.Arrays; @SuppressWarnings(...

    循环队列如何判断队列已满或者空?

    使用一个length变量记录实际元素个数,就不用每次去计算head指针和rear指针之间的关系来判断队列的状态。

    package demo;
    
    import java.util.Arrays;
    
    @SuppressWarnings("unchecked")
    public class CircleArrayQueue<T> {
        public int head = 0;//头指针
        public int rear = 0;//尾指针
        private Object[] data;//存放数据
        private int maxSize;//队列长度
        private int length = 0;//实际元素个数
    
        //默认初始化
        public CircleArrayQueue(){
            data = new Object[10];
            maxSize = 10;
        }
    
        //自定义初始化
        public CircleArrayQueue(int initSize){
            if(initSize <= 0){
                throw new RuntimeException("初始化长度必须大于0");
            }
            data = new Object[initSize];
            maxSize = initSize;
        }
    
        //判断循环队列是否已满
        public boolean isFull(){
            return length == maxSize;
        }
    
        //判断是否为空
        public boolean isEmpty(){
            return length == 0;
        }
    
        //入队
        public void add(T t){
            if(isFull()){
                throw new RuntimeException("队列已满,无法入队!");
            }else{
                data[rear%maxSize] = t;
                length++;
            }
        }
    
        //出队
        public T get(){
            if(isEmpty()){
                throw new RuntimeException("队列为空,没有元素");
            }
            length--;
            return (T)data[++head%maxSize];
        }
    
    	//查看队首元素
        public T peek(){
            if(isEmpty()){
                throw new RuntimeException("队列为空,没有元素");
            }
            return (T)data[(head+1)%maxSize];
        }
    
    }
    
    
    展开全文
  • 循环队列空和满判断解决: 使用一个计数器count, 初始化为0, 入队列加一, 出队列减一 ,当count == QUEUE_SIZE, 则判断队列满 利用一个flag标记, true代表入队列, false代表出队列, 初始化为false. 当head == ...
  • 循环队列如何工作2. 队列判断2.1 引入新变量判断队列的2.2 重新定义队列的2.3 比较两种方法的实现结果参考文献     所有的ADT都必须确定一件事情:如何分配内存来存储值,也就是顺序存储...
  • 队列:先进先出 出队只能在队头进行 入队只能在队尾进行 循环队列 在顺序队列中,尾指针到达队列边界时,就不能再进行入队操作了 在循环队列中,尾指针到达队列边界...start = end的情况下(只有队空和两种情况...
  • 循环队列---c++版本

    2021-03-08 09:15:25
    存在问题:队空和判断条件重复 解决方法: 这里选择第二种方法: 循环队列类的定义 入队操作 出队操作 读取队头元素 注意: 总结:当进行元素删除操作后,从front位置开始后一个元素,直到rear部分是...
  • 数据结构–用C++实现循环顺序队列 ...那么问题就来了,队空和判断条件相同,为了避免队时产生队空的判断或者相反,我们需要修改队条件使得队空和的判定条件分开。 方法:浪费一个元素空间
  • 判断队列是否已 , 已的条件如何来计算 头结点尾节点分别怎么指向 元素入队之后 , 尾节点应该如何变化 队列是否为 , 为的条件是什么 这些东西在循环队列中都是需要考虑的 , 考虑的方向有差异 , 就可能...
  • 当空队列时,front==rear,而当队列满时,还是front==rear,那么如何判断此时的队列究竟是还是呢? 办法一:设置一个标志变量flag,当front==rear且flag=0时为队列空,当front==rear且flag=1时为队列满。 办法二...
  • 队列

    2016-10-18 16:00:05
    循环队列中最重要的问题就是如何判断空和,以下有三种解决方案 ① 方法一: 浪费一个数组单元 设储存循环队列的数组的长度为QueueSize 队:(rear + 1)%QueueSize = front 队空:front = rear;template ...
  • 如何判断循环队列队 执行出队操作 队front=rear 队列的顺序存储结构及实现 0 1 2 3 4 入队 出队 a3 front rear front 3.2 队列 如何判断循环队列队的临界状态 队列的顺序存储结构及实现 0 1 2 3 4 入队 ...
  • /*如何解决环形队列始终要浪费一个位置的问题? 1.首先我们知道这个空着的位置是用来干嘛的, 队列有两个指针,一个指向队列头front,一个...3.所以,我们可以另外设置一个tag值,用tag值来判断空和. 4.当rear指
  • if(S.top-S.base>=S.stacksize) //栈,追加存储空间 { SElemType *p=(SElemType*)realloc(S.base, (S.stacksize+STACK_INCREMENT)*sizeof(SElemType)); if(!p) exit(-1); //存储分配失败 S.top=S....
  • 队列的 基本操作

    2017-10-07 23:14:00
    一.原理与方法 循环队列的 插入与 删除 ...2. 在循环队列判断空和的条件能否一样,为什么? 3. 用另一种不同与上面算法的方法解决“假上溢”问题。 #include<stdio.h> # include "stdlib.h" # ...
  • 所以就要报错说下溢了出队从队头(front指针指的元素)出队,入队从队尾入队(rear指针指的空间入队)所以就有了循环队列,就是我可以这样解决假上溢问题循环队列解决了假上溢问题,那么如何判断空和?...
  • 数组实现双端队列

    千次阅读 2019-05-28 19:57:27
    **难点是如何空和?**牺牲两个单元来区分队首和队尾,如果队首的下一个元素就是队尾就说明队列为空;如果队尾的下一个元素是队首,说明队列。 常用功能 模仿STL中deque用数组实现双端队列。 int size():...
  • Java实现一个阻塞队列

    2020-10-13 12:24:54
    循环队列如何实现的,以及实现的原理,判断的条件为何这样写,参考 Java语言实现一个循环队列 阻塞队列内部构造及初始化 使用ReetrantLock,进行多线程的锁的控制,以及使用Condition进行实现队列中操作...
  • 顺序栈 顺序队列 ...1.如何判断空满两状态: (1)count 故需多开一个空间 (2)留一个位置 或 front指向前一个 具体讨论: ①不留一个位置且front不指向前一个: 为frontrear; 空为frontrear...
  • 因为循环队列可能会遇到队和队空都是front=rear=0的诡异情况,所以需要以下操作来界定队空和。 如你所见,每一次的数据的增加都会使rear指针加一,则,在加入最后一个元素后rear会指向最后一个空间,所以...
  • 数据结构-队列及实现

    2021-03-31 19:26:29
    如何判断队列/? 使用额外标记 / 仅使用n-1个空间(判断头尾是否相遇) #define ERROR -1; typedef int Position; typedef int ElementType; struct QNode { ElementType *Data; /* 存储元素的数组 */
  • 数据结构day2——队列

    2019-06-28 09:18:00
    1.什么是队列 一种先进先出的线性表。 2.实现方式 1)顺序队列 ...这样做会出现新的问题,就是如何判断队列或者。 定义两个指针,分别是front,指向队列的首个元素,rear指针,指向队列的最...
  • 循环结构

    2019-04-02 13:00:22
    循环就像是一种附加属性,一种优化,对一些存储结构添加循环后,能解决一些内部问题。 循环的类型有:单向双向。...带来的问题:如何判断空满”状态? 链式xx链式循环xx: 就单向而言: 若头尾...
  • 1、若希望循环队列中的元素都能得到利用,则需要设置一个标志域tag,并以tag的值为0或1来区分队头指针front队尾指针rear相同时的队列是“”还是“”。试编写于此结构相应的入队出队算法。 2、利用两个栈S1,...
  • 如何判断循环队列满和空,通过牺牲一个空间,来判断待压入指针与起始点是否重合。 #include <stdio.h> //循环思想 int main() { int arr[10]={1,3,5,7,9,2,4,6,8,10}; for(int i=0;i<100;i++) {...
  • 视频录像循环存储

    2021-03-16 20:07:26
    之前写过V4L2获取...栈的最大空间为MaxSize,我们牺牲一个空间,使得方便判断空和。此时队头和队尾相同的话,则栈空,若是队头加一等于队尾的话,那就是队列满。(队尾指向队列最后一个,队头指向队首的下一

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

循环队列如何判断空和满