Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >循环队列数组实现

循环队列数组实现
EN

Stack Overflow用户
提问于 2022-04-11 12:49:14
回答 1查看 224关注 0票数 0

当主数组为full.and时,当主数组得到一个空槽时,等待列表数组中的第一个客户将填充主数组的空槽,并删除添加的元素,我试图使用循环队列implementation.following (先进先出)来创建这个列表。

这是我提出的循环队列实现。

代码语言:javascript
运行
AI代码解释
复制
public class CQueue {

int SIZE = 4; 
int front, rear;
int items[] = new int[4];

void initialize (String[]task) {
    for (int i = 0; i < task.length; i++) {
        task[i] = "FULL";
    }
}

CQueue() {
    front = -1;
    rear = -1;
}

boolean isFull() {
    if (front == 0 && rear == SIZE - 1) {
        return true;
    }
    if (front == rear + 1) {
        return true;
    }
    return false;
}

boolean isEmpty() {
    if (front == -1)
        return true;
    else
        return false;
}

void enQueue(int element) {
    if (isFull()) {
        System.out.println("Queue is full");
    } else {
        if (front == -1)
            front = 0;
        rear = (rear + 1) % SIZE;
        items[rear] = element;
        System.out.println("Inserted " + element);
    }
}


int deQueue() {
    int element;
    if (isEmpty()) {
        System.out.println("Queue is empty");
        return (-1);
    } else {
        element = items[front];
        if (front == rear) {
            front = -1;
            rear = -1;
        } 
        else {
            front = (front + 1) % SIZE;
        }
        return (element);
    }
}

void display() {
    int i;
    if (isEmpty()) {
        System.out.println("Empty Queue");
    } else {
        System.out.println("Front -> " + front);
        System.out.println("Items -> ");
        for (i = front; i != rear; i = (i + 1) % SIZE)
            System.out.print(items[i] + " ");
        System.out.println(items[i]);
        System.out.println("Rear -> " + rear);
    }
}

这个delete方法将使用用户输入从任务数组中删除元素并添加队列的第一个come元素。

代码语言:javascript
运行
AI代码解释
复制
void deleteArr(String task[]) {
    CQueue q = new CQueue();
    int NUM;
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter customer num to delete : ");
    NUM = sc.nextInt()-1;
    task[NUM] = "EMPTY";
    int element = items[front];
    task[NUM]=Integer.toString(element);
    q.deQueue();
    q.display();
}

主要方法

代码语言:javascript
运行
AI代码解释
复制
    public static void main(String[] args) {
        int k =1;
        String task[] = new String[12];
        CQueue q = new CQueue();
        q.initialize(task);
        q.display();
        for (int i = 0; i < task.length; i++) {
            if (task[i].equals("FULL")) {
                q.enQueue(k);
                k++;
            }
        }
        while (true) {
            q.deleteArr(task);
            for (int j = 0; j < task.length; j++) {
                System.out.println(task[j]);
            }
        }

}

在删除任务数组时,我一直在讨论如何将队列元素添加到任务数组中。

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 03:09:37

我建议您检查front>=0在deteleArr函数中是否存在。此外,您还应该使用main中定义的队列实例,而不是新实例:

代码语言:javascript
运行
AI代码解释
复制
void deleteArr(String task[]) {
    int NUM;
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter customer num to delete : ");
    NUM = sc.nextInt()-1;
    task[NUM] = "EMPTY";
    if(front>=0) {
        task[NUM]=Integer.toString(items[front]);
    }
    this.deQueue();
}

如果需要,可以使用以下显示队列函数:

代码语言:javascript
运行
AI代码解释
复制
void display() {
    int i;
    System.out.println("Print queue");
    System.out.println("===========");
    if (isEmpty()) {
        System.out.println("Empty Queue");
    } else {
        System.out.println("Front -> " + front);
        for (i = front; i <= rear; i++) {
            System.out.println("item["+i+"]: " +items[i]);
        }
        System.out.println("Rear -> " + rear);
    }
    System.out.println("============");
}

您可以使用另一个函数来显示任务数组:

代码语言:javascript
运行
AI代码解释
复制
public static void printTaskArray(String task[]) {
    System.out.println("Print task[]");
    System.out.println("============");
    if (task.length==0) {
        System.out.println("Empty task");
    } else {
        for (int j = 0; j < task.length; j++) {             
            System.out.println("task["+j+"]: "+task[j]);
        }
    }
    System.out.println("============");
}

使用此封装,您可以按以下方式更改主文件:

代码语言:javascript
运行
AI代码解释
复制
public static void main(String[] args) {
    int k =1;
    String task[] = new String[12];
    CQueue q = new CQueue ();
    q.initialize(task);
    printTaskArray(task);
    q.display();
    for (int i = 0; i < task.length; i++) {
        if (task[i].equals("FULL")) {
            q.enQueue(k);
            k++;
        }
    }
    printTaskArray(task);
    q.display();
    while (true) {
        q.deleteArr(task);
        printTaskArray(task);
        q.display();
    }
}

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71834135

复制
相关文章
循环队列出队-数组循环队列
  我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势。此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构在频繁出队的情况下,会产生假溢出现象循环队列出队,导致数组使用效率降低,所以引入循环队列这种结构。本文将从以下两个大角度介绍循环队列这种数据结构:
宜轩
2022/12/29
1.1K0
深入理解循环队列----循环数组实现ArrayDeque
     我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势。此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现
Single
2018/01/04
2.5K0
深入理解循环队列----循环数组实现ArrayDeque
使用数组模拟队列、循环队列和栈
在一些考试题中以及笔试面试的过程中,在需要使用stack和queue的时候,可能被要求不能使用STL中相关的库函数,也就意味着我们需要使用纯C进行编程。但是如果在考试中或者笔试面试中,为了要使用栈和队列,而去写一个完整的数据结构是比较大费周章,况且在时间上也不一定允许,因此,使用数组来模拟栈和队列的实现是一种明智的选择,原因有两个: 一、使用数组模拟队列和栈可以简化编程的复杂度,节省时间,比如在dfs()和bfs()可以花更多的时间来思考这两个逻辑的实现。 二、使用数组模拟的栈和队列在效率上比标准库的容器类高很多,可以使得程序执行的速度更快。
lexingsen
2022/02/24
7680
循环队列的实现
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115385.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/10
3110
循环队列的实现
Java 循环队列的实现
  队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空队列”。
Rekent
2018/09/04
1.5K0
Java 循环队列的实现
循环队列出队-循环队列的c语言实现
  队列就是一个能够实现“先进先出”的存储结构,队列分为链式队列和静态队列。静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。说白了循环队列就是一个数组循环队列出队,我们把这个数组当成首尾相连来使用(写到数组的末尾后从头开始写)。
宜轩
2022/12/29
7260
队列的一种实现:循环队列
队列的一种实现,循环队列,通过使用固定长度数组及首尾指针实现队列的入队、出队等: class CircularQueue<T> { private Object[] data; //数据存储数组 private int head; //队列头指针 private int tail; //队列尾指针 private int size; //队列长度 /** * 初始化 * * @param k */ publi
WindWant
2020/09/10
4940
循环队列出队-队列,顺序队列与循环队列
  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
宜轩
2022/12/29
7830
java循环队列实现相关方法
循环队列相关背景### 什么是队列就不解释了 头尾相接的顺序存储结构称为循环队列(circular queue)。 循环队列中需要注意的几个重要问题: ①队空的判定条件,队空的条件是front=rear; ②队满的判定条件,(rear+1)%QueueSize=front。QueueSize为队列初始空间大小。 import com.sun.corba.se.impl.orbutil.graph.Node; import com.sun.corba.se.spi.presentation.rmi.IDLN
张俊怡
2018/04/24
6500
C语言实现循环队列
2️⃣:入队a1、a2、a3,q -> front = 0, q -> rear = 3
忆想不到的晖
2020/07/15
3K0
C语言实现循环队列
循环队列出队-栈和队列的实现
  此外,当返回栈顶元素时循环队列出队,最后插入的元素会被返回,因此,栈的特点是“后进先出”
宜轩
2022/12/29
3310
标志位法实现循环队列
为了解决顺序队列假溢出的问题,提出了循环队列。使得内存的利用率得到了很大的提升。但是在判断循环队列空和满这两种状态任然存在问题,因为对于一个循环队列,不做任何判空和判满的机制。判空和判满的条件都是:q->rear == q->front。带来的问题就是当出现上述条件时不能区分循环队列到底是空还是满,因此为了解决上述问题。人们提出以下两种方案来解决: (1)牺牲一个位置用作判断的条件
lexingsen
2022/02/24
6530
数组实现栈和队列
我们需要设置一个数组当作栈,一个index当作栈指针 当我们往数组中添加数据时候,栈指针+1 当我们栈指针指向size时候,再要求加数据要报错 当我们往数组中减数据时候,栈指针-1 当我们栈指针指向0时候,再要求弹出数据要报错
名字是乱打的
2022/05/13
2110
数组实现栈和队列
循环队列
(1)设一个容量为capacity=8,size=5(a,b,c,d,e)的数组,左侧为队首、右侧为队尾。
wfaceboss
2019/04/08
4970
循环队列
循环队列
当删除队首元素时,head加1,上图如果把C也删掉,那么就 head = tail 了 tail 始终指向队列元素的下一个位置 对应的操作: 队空:head=tail 求队长:tail - head 入队:新元素按 tail 指示位置加入,再将队尾指针加1 ,即 tail = tail + 1 出队:将head指示的元素取出,再将队头指针加1,即head = head + 1
SerMs
2022/03/30
3670
循环队列
循环队列
法1:用到的是我之前写的循环队列文章里面的方法 循环队列详解 #include<iostream> using namespace std; class MyCircularQueue { private: int queue[1000]; int head; int tail; int size; public: MyCircularQueue(int k) { size = k+1; head =
大忽悠爱学习
2022/05/05
2610
循环队列
循环队列
#include <stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef struct Queue { int *data; int head, tail, length, count; }Queue; void init(Queue *q, int length) { q->data = (int *)malloc(sizeof(int) * length); q->length = len
小飞侠xp
2021/05/14
2400
循环队列
循环队列类似栈,但是有两个口,一个专门用来入队,一个专门用来出队。由于入队出队不在一个端口,因此如果不适用循环队列,随着队列的使用,存储空间马上就被耗光了。在循环队列中,一个主要的知识点,就是如何判断队列为空,或者队列满。 这里主要有两个方法: 1 设置一个标记位,初始时,队列为空,我们设置flag=0;随着数据的使用,如果队满,设置flag=1; 2 使用一个空的数据位,这样rear指针永远也不能追上front指针。当front==rear时,队列即为空;当(rear-front)%SIZE==SIZE时
用户1154259
2018/01/18
5290
循环队列
顺序循环队列(C语言实现)
头文件: Queue.h typedef struct { DataType queue[MaxQueueSize]; int rear; //队尾指针 int front; //队头指针 int count; //计数器 }SeqQueue; //初始化 void Q
别团等shy哥发育
2023/02/27
7220
顺序循环队列(C语言实现)
基于数组实现队列 根据队列特性实现击鼓传花
实现思路 队列的核心思想是先进先出(FIFO),队列支持从前端(front)移除数据,从后端(rear)插入数据 实现一个队列需要具备以下方法 将元素加入到队列 删除队列前端元素 查看队列前端元素 查看队列是否为空 查看队列大小 查看队列内所有元素 清空队列 实现代码 /** * 基于数组实现队列 */ function Queue() { this.items = [] //将元素加入到队列 Queue.prototype.enqueue = function(elem) { t
peng_tianyu
2022/12/15
3960

相似问题

使用循环数组实现队列

40

用循环数组实现队列

34

使用循环数组的队列实现

34

在循环数组中实现队列

10

循环队列实现

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档