精华内容
下载资源
问答
  • 顺序存储结构的循环队列 假设循环队列的队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度。 (1) 入队时队尾指针前进1:(rear+1)%QueueSize (2) 出队时队头指针前进1:(front+1)%QueueSize (3) 队列...

    参考链接

    顺序存储结构的循环队列

    假设循环队列的队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度。
    (1) 入队时队尾指针前进1:(rear+1)%QueueSize
    (2) 出队时队头指针前进1:(front+1)%QueueSize
    (3) 队列长度:(rear-front+QueueSize)%QueueSize

    现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为?(假设队头不存放数据)
    答案:(rear-front+N)%N
    (4) 队空和队满的条件
    为了区分队空还是堆满的情况,有多种处理方式:
    方式1: 牺牲一个单元来区分队空和队满,入队时少用一个队列单元,即约定以"队头指针在队尾指针的下一位置作为队满的标志"。
    ``队满条件为:(rear+1)%QueueSize==front

    队空条件为:front==rear

    队列长度为:(rear-front++QueueSize)%QueueSize
    ``

    方式2: 增设表示队列元素个数的数据成员size,此时,队空和队满时都有front==rear。
    ``队满条件为:size==QueueSize

    队空条件为:size==0
    ``

    方式3: 增设tag数据成员以区分队满还是队空
    ``tag表示0的情况下,若因删除导致front==rear,则队空;

    tag等于1的情况,若因插入导致front==rear则队满
    ``

    展开全文
  • 循环队列判断队满队 1.做标记: 给一个flag. 出队列同时flag = 0; 入队列同时flag = 1; 当队头与队尾指针相等时判断flag的值: flag = 0 表示队; flag = 1 表示队满; 2.将有效元素个数记录保存: 给出一个...

    顺序表与链表的不同点

    顺序表 链表
    尾插和尾删时间复杂度O(1);任意位置的插入删除时间复杂度O(N) 删除尾节点O(1)(不带头节点的单链表);有保存则为O(N) ;任意位置插入删除O(1);
    底层空间为一段连续的空间 底层空间不是连续的
    支持随机访问 (基于底层空间的结构) 不支持随机访问
    空间容量需要扩容 不需要扩容
    应用场景不同(少操作高效存储)(栈的实现) 多操作处理起来会更高效
    不需要频繁申请空间(扩容是需要) 每次插入都需要申请节点空间(1.内存碎片问题;2.额外空间浪费[申请节点空间会保存节点造成的];3.效率低)
    缓存利用率高 缓存利用率低
    栈区
    具有后进先出的特点 是一块实实在在存在的内存空间
    是一种数据结构 是按照栈的特性(后进先出)实现的

    循环队列判断队满队空
    1.做标记:
    给一个flag.
    出队列同时flag = 0;
    入队列同时flag = 1;
    当队头与队尾指针相等时判断flag的值:
    flag = 0 表示队空;
    flag = 1 表示队满;
    2.将有效元素个数记录保存:
    给出一个count.
    出队列同时count–;
    入队列同时count++;
    当count = 0 表示队空;
    当count = 容量时表示队满;
    3.特殊给定:
    当队尾指针加一取模等于队头指针时表示队满;
    当队尾指针等于队头指针时表示队空;

    展开全文
  • 循环队列:把存储队列元素的表从逻辑上看成一个环,称为循环队列。当队首front = maxSize - 1后,再前进一个位置就自动到0,这可以利用除法取余运算(%)来实现。package com.ArrayQueue;public class ArrayQueue1 { ...

    循环队列:把存储队列元素的表从逻辑上看成一个环,称为循环队列。当队首front = maxSize - 1后,再前进一个位置就自动到0,这可以利用除法取余运算(%)来实现。

    0544ba92b5801952f94a54d92cf3b594.png
    package com.ArrayQueue;public class ArrayQueue1 { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(5); System.out.println("判空:"+arrayQueue.isEmpty()); System.out.println("执行入队操作···"); arrayQueue.enQueue(1); arrayQueue.enQueue(2); arrayQueue.enQueue(3); arrayQueue.enQueue(4); System.out.println("输出队中的长度:"); System.out.println(arrayQueue.getSize()); System.out.println("队中元素为:"); arrayQueue.getAll(); System.out.println("执行出队操作···"); arrayQueue.deQueue(); System.out.println("队中元素为:"); arrayQueue.getAll(); System.out.println("输出队中的长度:"); System.out.println(arrayQueue.getSize()); } public static class ArrayQueue{ private int front; //队头 private int rear; //队尾 private int maxSize = 5; //最大容量 private int size; //当前队列长度 private int arr[]; //模拟队列的数组 //初始化 public ArrayQueue(int maxSize){ this.maxSize = maxSize; arr = new int[maxSize]; front = 0; rear = 0; size = 0; } //判断队空 public boolean isEmpty(){ return front == rear; } //判断队满 public boolean isFull(){ return (rear+1) % maxSize == front; } //入队 public void enQueue(int n){ if(isFull()){ throw new RuntimeException("队满,不能进行入队操作···"); } size++; arr[rear] = n; rear = (rear+1)%maxSize; } //出队 public int deQueue(){ if(isEmpty()){ throw new RuntimeException("队空,不能进行出队操作···"); } size--; int m = arr[front]; front = (front + 1) % maxSize; return m; } //显示队列中的元素 public void getAll(){ if(isEmpty()){ throw new RuntimeException("队列为空····"); } for(int i = front; i < rear;i++){ System.out.print(arr[i]+" "); } System.out.println(); } //显示队的长度 public int getSize(){ return size; } }}

    运行结果如下图所示:

    9d12ea503ea677c4b4fc0223898cedf4.png

    idea控制运行结果

    展开全文
  • 循环队列中,Q.front表示对头,Q.rear表示队尾。因为队列大小是有限的,所以在队列指针移动的时候,会出现到头的情况,这时候需要指针回到起点。 所以入队时Q.rear=Q.rear+1%Maxsize,出队时,Q.front=Q.front+1%...

      在循环队列中,Q.front表示对头,Q.rear表示队尾。因为队列大小是有限的,所以在队列指针移动的时候,会出现到头的情况,这时候需要指针回到起点。

    所以入队时Q.rear=Q.rear+1%Maxsize,出队时,Q.front=Q.front+1%Maxsize.而如果一个队列是如下这种结构

     

    • 在这种结构下,当出现队列满和队列空的情况,这两种情况是一样的,Q.rear=Q.front.为空,一直移除,Q.front一直与rear接近在这种结构下,当出现队列满和队列空的情况,这两种情况是一样的,Q.rear=Q.front.为空,一直移除,Q.front一直与rear接近,入队时,一直增大rear,直到等于front。在这种情况下,是无法判断谁是空,谁是满,所以有了另外的一些小处理。

    • 在这两种结构下都是队列满,但是第二种是Q.rear指向空,下一位是Q.front才代表队列满。所以牺牲了一个空间,而这种情况下,Q.rear=Q.front代表队列空,也就区分开了,还可以把Q.front指向空下一位是第一个元素,这样的话,就会出现Q.front下一位是Q.rear代表空,而Q.rear=Q.front代表队列满,这与刚刚的方式是相反的。

    转载于:https://www.cnblogs.com/cold-windy/p/10884685.html

    展开全文
  • 本人原创,有问题请评论,楼主会随时回来查看修改滴~觉得...顺序结构-循环队列 判空 判满 求长度 入队 出队 获取队头 获取队尾 */ #include<bits/stdc++.h> using namespace std; #define QUEUESIZE 1...
  • 循环队列的一些基本操作 void InitQueue(SqQueue &Q) { // 构造一个队列Q Q.base = (QElemType *)malloc(MAX_QSIZE*sizeof(QElemType)); if (!Q.base) // 存储分配失败 exit(OVERFLOW); Q.front = Q....
  • 基本概念(1)顺序队列(2)循环队列(3)过程实例二.相关属性、方法一.基本概念队列(queue)是一种线性的数据结构,只允许在表的一端进行插入操作而在另一端进行删除的线性表。进行删除操作的一端称为队头,进行插入操作的...
  • 基本概念(1)顺序队列(2)循环队列(3)过程实例二.相关属性、方法一.基本概念队列(queue)是一种线性的数据结构,只允许在表的一端进行插入操作而在另一端进行删除的线性表。进行删除操作的一端称为队头,进行插入操作的...
  • 顺序存储的队列,元素循环存储循环队列定义循环队列判空、判满循环队列长度代码实现测试结果 循环队列定义 在逻辑上把顺序存储的队列想象成一个环,就是循环队列。 循环队列仍是顺序存储,只是元素可以循环存储在...
  • 一.基本概念     队列(queue)是一种线性的数据结构,只允许在...顺序队列,用一片连续的存储空间来存储队列中的数据元素,所以一般用数组来实现顺序队列。一般队头用front来指示,指向刚出队...
  • //队列的顺序存储(循环队列) #include<stdio.h> #include<stdlib.h> #define Maxsize 10 typedef struct{ int data[Maxsize]; int front,rear; }SqQueue; void InitQueue(SqQueue &Q){//初始化队列 ...
  • front/rear == 0 判空: front == rear 判满(rear+1)%空间大小 == front #include #include #include typedef struct { int front; int rear; int* array; //int size; int k; } MyCircularQueue; MyCircularQueue* ...
  • //顺序循环队列的结构体定义 #define MaxSize 100 typedef struct{ int data[MaxSize]; int front; int rear; }SqQueue; 二、初始化 代码如下(示例): //初始化 void InitQueue(SqQueue &qu){ qu.front ...
  • ☝☝☝软件工程考研独家平台撰稿| 康康哥编辑| 丽丽姐本文由懂计算机、软件工程的博士师哥原创双日练:NO.20200922循环队列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端...
  • 循环队列

    2020-05-08 22:11:38
    一、说明 循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状...因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize。 二、代码 #ifndef CYCLEQUEUE_H #define C
  • 循环队列中,我用的是少用一个元素空间的方法来区别队和队满。 队:q-&gt;front = q -&gt;rear;队满:(q-&gt;rear+1)%MAXSIZE = q-&gt;front,具体代码如下: #include &lt;stdio.h&...
  • #include //顺序循环队列 对尾插入,对头删除,先进先出 #define MaxSize 20 typedef struct { int queue[MaxSize]; int rear; //对尾指针 int front; //对头指针 int count; //计数器 }SeqCQueue; void ...
  • 队列 #include #include //结点的结构体定义 typedef int DataType; typedef struct qnode { DataType data; struct qnode *next; }LQNode; //定义头指针和尾指针 typedef struct { LQNode *front; LQNode *...
  • 目前,处在学习数据结构+ing,由于之前学过了队列,今天就把自己写过的代码做了一些完善分享给大家,希望能够帮助到有需要的朋友,有不足的地方欢迎大家交流 φ(゜▽゜*)♪ 队列是另一种限定性的线性表,它只允许在...
  • /*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Size 50 //队列的最大长度 #define OK 1 #define ERROR 0 typedef...
  • 采用循环顺序方式存储队列,测试用例为:将0~9入队,然后打印输出,代码如下: #define MAXQSIZE 100 typedef struct { QElemType data[MAXQSIZE]; int front,rear; }SqQueue; /* 初始化队列 */ void ...
  • 利用循环队列解决注:循环队列判满时,要利用一个没有元素的空间。所以分配空间时要在多申请一个空间,即使用空间+1。(代码注释里有)可以借鉴一下别人写的,思路很清稀。现世安稳:循环队列(C语言)​zhuanlan....
  • 设计循环队列

    2019-02-26 17:08:04
    循环队列,也叫“环形队列”。 它指的是:将队列抽象成一个环形,如果队头前面有空间,我们...因此,环形队列判空条件是front==rear,判满的条件是(rear+1)%n==front.n表示数组总大小(n=k+1,k表示有效元素个数)...
  • 循环队列的实现

    2015-08-20 15:43:37
    使用数组实现一个循环队列,实现的方法包括:队列的初始化、元素进队列、元素出队列、队列判空、队列判满、取队头元素、取队尾元素、  遍历队列并对各数据项调用visit函数、队列置空 代码如下(C实现): ...
  • 3.判空 4. 压入队列 5.出队列 6.取队头元素 7.取队尾元素 一、简介 1.循环队列的用处 采用求余方式实现元素的循环存储,避免假溢出现象 2.基本操作 若rear+1,则对其与N(队列最大容量数)求余,即...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

循环队列判空