队列实现为数组

莉莉丝缺乏症

因此,我被要求在数组中执行队列的实现,直到我看到出队并尝试入队另一个值之后得到有趣的输出之前,我没有任何麻烦。
例如(输出):

Queue: [1]     //Enqueue 1  
Queue: [1, 2]  //Enqueue 2
Queue: [2]      //Dequeue
Queue: [2, 2]   //Enqueue 3
Queue: [2, 2, 3] //Enqueue 4
Queue: [5, 2, 3, 4]  //Now is a total mess...

我的代码包含队列,dequeque和resize方法,一切都工作正常,我真的完全不知道如何解决它……这是我的主要代码,如果您想尝试一下。谢谢。

public class MainQueue {
    public static void main(String[] args) {

        int capacity=5;
        Queue<Integer> queue = new Queue<Integer>(capacity);

        queue.enqueue(1);
        System.out.println("Queue: "+ queue);
        queue.enqueue(2);
        System.out.println("Queue: "+ queue);
        queue.dequeue();
        queue.enqueue(3);
        System.out.println("Queue: "+ queue);
        queue.enqueue(4);
        System.out.println("Queue: "+ queue);
        queue.enqueue(5);
        System.out.println("Queue: "+ queue);

    }
}

班级

import java.util.NoSuchElementException;


public class Queue<E> {
    private E[] elements;//array in generic
    private int front;//first element or front of the queue
    private int back;//last element or back of the queue
    private int capacity; //capacity of the queue
    private int count; //indicates number of elements currently stored in the queue

    public Queue(int size)
    {
        capacity = size;
        count = 0;
        back = size-1;
        front = 0;
        elements =(E []) new Object[size];  //queue array empty
    }

    //Returns true if the queue is empty or false
    public boolean isEmpty()
    {
        return count==0;//means its true
    }

    //Add elements to the queue
    public void enqueue(E item)
    {
        if(count == capacity)
        {
            resize(capacity*2);
            // System.out.println("Queue is full");

        }

        back =(back+1) % capacity;    //example back=(0+1)%10=1
        elements[back]=item;
        //elements[0]=0
        //item=elements[count];
        count++;
    }


    //Public resize
    public void resize(int reSize){
        E[] tmp = (E[]) new Object[reSize];

        int current = front;
        for (int i = 0; i &lt; count; i++)
        {
            tmp[i] = elements[current];
            current = (current + 1) % count;
        }

        elements = tmp;
        front = 0;
        back = count-1;
        capacity=reSize;

    }


    //Dequeue method to remove head
    public E dequeue()
    {
        if(isEmpty())
        throw new NoSuchElementException("Dequeue: Queue is empty");
        else
        {
            count--;
            for(int x = 1; x <= count; x++)
            {
                elements[x-1] = elements[x];
            }
            capacity--;
            return (E) elements;
        }
    }

    //peek the first element
    public E peek()
    {
        if(isEmpty())
        throw new NoSuchElementException("Peek: Queue is empty");

        else
        return elements[front];
    }


    //Print queue as string
    public String toString()
    {

        if(isEmpty()) {
            throw new NoSuchElementException("Queue is empty");
        }

        String s = "[";
        for(int i = 0; i < count; i++)
        {
            if(i != 0)
            s += ", ";
            s = s + elements[i];// [value1,value2,....]
        }

        s +="]";
        return s;
    }

    public void delete() {   //Delete everything
        count = 0;
    }
}
罗希特·贾恩(Rohit Jain)

您正在更新backenqueue()使用的电流值的方法back,但在你没有更新它dequeu()的方法在所有。那将无法正常工作。实际上,您应该宁愿back根据进行计算count

只是改变:

back = (back + 1) % capacity;

到:

back = count % capacity;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将条件实现为数组

来自分类Dev

实现循环数组队列

来自分类Dev

队列的数组实现:奇怪的输出

来自分类Dev

KDTree实现为单个数组/无节点

来自分类Dev

通过数组实现的线性队列

来自分类Dev

使用队列创建实现为Java中单链列表树的文件系统

来自分类Dev

为什么不将STL双端队列仅实现为圆形向量?

来自分类Dev

堆栈和队列:使用数组更容易实现?

来自分类Dev

双端队列数组和列表实现之间的区别

来自分类Dev

使队列数据结构作为数组实现的问题

来自分类Dev

使用 C++ 实现队列和调整数组大小

来自分类Dev

如何在不进行类型转换的情况下将flatten实现为数组的扩展?

来自分类Dev

为什么不将数组实现为带有数字键的哈希?

来自分类Dev

需要帮助将迷宫实现为二维数组C ++

来自分类Dev

ArrayDeque实现为一个数组,为什么不是随机访问?

来自分类Dev

尝试将堆栈实现为数组时,我在Java中不断收到“找不到符号”错误

来自分类Dev

将ViewPager实现为LinearLayout

来自分类Dev

将EntitySet实现为IList

来自分类Dev

命名实现为默认实现

来自分类Dev

模板基类实现为默认实现

来自分类Dev

命名实现为默认实现

来自分类Dev

为什么要使用链接列表而不是数组或向量实现来实现堆栈或队列?

来自分类Dev

为什么在最坏情况下删除最小堆的运行时实现为数组O(N)?

来自分类Dev

为什么在最坏情况下删除最小堆的运行时实现为数组O(N)?

来自分类Dev

在LinkedList中实现队列

来自分类Dev

Trove库队列实现

来自分类Dev

阻塞队列的实现

来自分类Dev

如何实现队列,

来自分类Dev

C ++队列实现错误

Related 相关文章

热门标签

归档