【问题标题】:How to split a queue into two queues?如何将一个队列分成两个队列?
【发布时间】:2020-11-17 09:08:29
【问题描述】:

问题

给定一个队列,将队列拆分为两个队列:

  • 一个包含奇数和其他偶数。
  • 必须在两个队列中保持元素的相对顺序。
  • 返回一个包含两个队列的数组,第 0 个索引应该 包含奇数队列,第一个索引应包含 偶数队列。

代码

这是我迄今为止尝试过的。我目前的队列是空的。

class Queue {

private int front;
private int rear;
private int maxSize;
private int arr[];
  
Queue(int maxSize) {
    this.front = 0;
    this.rear = -1;
    this.maxSize = maxSize;
    this.arr = new int[this.maxSize];
}
  
public boolean isFull() {
    if (rear == maxSize - 1) {
        return true;
    }
    return false;
}
        
public boolean enqueue(int data) {
    if (isFull()) {
        return false;
    } else {
        arr[++rear] = data;
        return true;
    }
}

public void display() {
    if(isEmpty())
        System.out.println("Queue is empty!");
    else {
        for (int index = front; index <= rear; index++) {
            System.out.println(arr[index]);
        }
    }
}
        
public boolean isEmpty() {
    if (front > rear)
        return true;
    return false;
}
        
public int dequeue() {
    if (isEmpty()) {
        return Integer.MIN_VALUE;
    } else {
        int data = arr[this.front];
        arr[front++] = Integer.MIN_VALUE;
        return data;
    }
}

public int getMaxSize() {
    return maxSize;
}
}

class Main {

public static void main(String[] args) {
        
    Queue queue = new Queue(7);
    queue.enqueue(2);
    queue.enqueue(7);
    queue.enqueue(9);
    queue.enqueue(4);
    queue.enqueue(6);
    queue.enqueue(5);
    queue.enqueue(10);
    
    Queue[] queueArray = splitQueue(queue);
        
    System.out.println("Elements in the queue of odd numbers");
    queueArray[0].display();
        
    System.out.println("\nElements in the queue of even numbers");
    queueArray[1].display();

}

// function to split the queue into two queues; 
    // 1. one even. one odd.
    // 2. relative elements must be maintained in both queues.
    // 3. 0th index returns queue of odd numbers
    // 4. 1st index returns queue of even numbers
public static Queue[] splitQueue(Queue queue) {
    
    // create queue array for 0th index for odd and 1st index for even
    Queue[] numberArr = new Queue[2];
    
    // create two queues - odd and even queue
    Queue oddQueue = queue;
    Queue evenQueue = queue;
    
    // seperate odd and even
    while (!oddQueue.isEmpty()) {
        // start dequeue
        int val = queue.dequeue();
        
        // check even odd
        if (val % 2 == 0) {
            System.out.println(val + " - Even");
            evenQueue.enqueue(val);
        }
        else {
            System.out.println(val + " - Odd");
            oddQueue.enqueue(val);
        }
    }
    evenQueue.display();
    oddQueue.display();
    
    // assign odd numbers queue to 0th index of array
    numberArr[0] = oddQueue;
    // assign even numbers queue to 1th index of array
    numberArr[1] = evenQueue;
    
    if ((!oddQueue.isEmpty() && !evenQueue.isEmpty())) {
        return numberArr;
    }
    return null;
}
}

我目前正在做一个队列练习,目前卡在这个实现上。我将不胜感激。

编辑:我已经提供了我迄今为止尝试过的解决方案。

【问题讨论】:

  • 请告诉我们您到目前为止尝试了什么,以便我们至少提供您的一些代码
  • 1.请指定你卡在哪里 2. 你的代码在登录屏幕后面
  • 分享一些例子。

标签: java data-structures queue


【解决方案1】:

在while循环中检查形参“queue”是否为空=> while(!queue.isEmpty())

【讨论】:

    【解决方案2】:
    public static Queue[] splitQueue(Queue queue) {
           //Implement your code here and change the return value accordingly
        Queue[] numberArr = new Queue[2];
          //create two queues - odd and even queue
        Queue oddQueue=new Queue(queue.getMaxSize() );
        Queue evenQueue=new Queue(queue.getMaxSize());
        // seperate odd and even
       while(!(queue.isEmpty()))
       {
           int val=queue.dequeue();
           //System.out.println(val);
           if(val%2==0)
           {
               evenQueue.enqueue(val);
           }else
           {
               oddQueue.enqueue(val);
           }
       }
        // assign odd numbers queue to 0th index of array
        numberArr[0] = oddQueue;
        // assign even numbers queue to 1th index of array
        numberArr[1] = evenQueue;
        return numberArr;
    
        }
    

    我处理了你的代码,但我得到了你的错误 1] 在 while 条件中使用类似 (!queue.isEmpty()) 的条件 2]您没有创建新队列。它将仅由 new 关键字创建 像, 队列oddQueue=new Queue(queue.getMaxSize());

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 2017-06-03
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多