Круговой реализация очереди с помощью массива в Java


Вот мой код реализации, такие очереди в Java.

import java.util.Scanner;
class CircularQueue
{
int maxSize;
int rear;
int front;
int aQueue[];
{
    rear = -1;
    front = -1;
}
CircularQueue(int maxSize)
{
    this.maxSize = maxSize;
    this.aQueue = new int[maxSize];
}
void enQueue(int item)
{
    if(((rear+1) % maxSize) == front)
    {
        System.out.println("Queue is Full");
    }
    else
    {
        if (rear == front && front == -1)
        {
            front += 1;
        }
        rear = (rear+1) % maxSize;
        aQueue[rear] = item;
    }
}
void deQueue()
{
    if(rear == front && rear == -1)
    {
        System.out.println("Queue is Empty.");
    }
    else
    {
        int item = aQueue[front];
        if(rear == front)
        {
            rear = -1;
            front = -1;
        }
        else
        {
            front = (front + 1) % maxSize;
        }
        System.out.println(item + " is deQueued from the Queue");
    }
}

String elementOrElements()
{
    String send = (rear == front)? (" ") :("s ");
    return send;
}

void display()
{
    int tmpfront = front;
    if(rear == front && rear == -1)
            {
                    System.out.println("Queue is Empty.");
            }
            else
    {
        System.out.println("The element"+ elementOrElements() + "on the Queue are:- ");
        for(int i=0; i<maxSize ; i++)
        {
            if(tmpfront != rear)
            {
                System.out.println(aQueue[tmpfront]);
                tmpfront = (tmpfront + 1) % maxSize;
            }
            else
            {
                System.out.println(aQueue[rear]);
                break;
            }
        }
    }
}
public static void main(String []args)
{
    Scanner input = new Scanner(System.in);
    System.out.print("Enter total no of elements to be in the queue:- ");
    int maxSize = input.nextInt();
    CircularQueue queue = new CircularQueue(maxSize);
    int select;
    int term = 0;
    while (term == 0)
    {
        System.out.print("\nOption:\tTo Do:\n1\tTo push element.\n2\tTo POP element.\n3\tTo Display the Queue elements.\n4\tTo Exit the Program.\nEnter your option:- ");
                select = input.nextInt(); 
        switch(select)
        {
            case 1:
            {
                System.out.print("Enter element to insert in the Queue:- ");
                int ele = input.nextInt();
                queue.enQueue(ele); 
                break;
            }
            case 2:
            {
                queue.deQueue();
                break;
            }
            case 3:
            {
                queue.display();
                break;
            }
            case 4:
            {
                term = 1;
                System.out.println("Thank you!");
                break;
            }
            default:
                System.out.println("Enter a valid options");
        }
    }
  }
}

Я могу что-нибудь сделать, чтобы улучшить его? Код, написанный для класса DSA практический.



3746
1
задан 15 февраля 2018 в 03:02 Источник Поделиться
Комментарии
2 ответа

Имея программу очереди работает, это достижение своего собственного. Поэтому, пожалуйста, примите следующие советы в качестве предложений на следующий учебный шаги на пути к инженера-программиста. Может быть, некоторые концепции будет новым для вас, и это вполне нормально. Рим был построен не за один день...

А Queue должен быть компонент, который вы можете повторно использовать без изменений, если вам нужен какой-то будущей программы. Это не должна быть отдельная программа.

Итак, изменение deQueue() способ вернуть товар, а не выводить его внутри этого метода, и пусть снаружи (в вашем случае main() способ) сделать печать. Может быть, следующая программа хочет сделать какие-то вычисления с цифрами он получает из очереди перед печатью результатов, или, может быть, это какой-то встроенной программы управления Quad вертолет, что даже нет места, чтобы написать текст.

Аналогично, вместо того, чтобы печатать, что очередь полна или пуста, есть методы бросают исключение, если enQueue() не могу принять новый элемент или если deQueue() нет больше элементов. Что познакомим вас с важной концепции обработки исключений, где даже опытные разработчики порой трудно найти правильный путь.

Чтобы дать вашему Queue'ы пользователей возможность увидеть, может ли он поставить в очередь или удалять другой элемент, добавить две более методов, возвращающих значение типа boolean: isFull() и isEmpty().

Сейчас твоя очередь может принимать только целочисленные элементы. С помощью Java дженериков, вы можете изменить код, так что вы можете использовать те же очереди исходный код для целых чисел, для поплавков, для строк, и любой другой тип данных, которые вы хотите. Это еще одна особая концепция, которая занимает некоторое время, чтобы ознакомиться с, но это стоит боли.

2
ответ дан 15 февраля 2018 в 04:02 Источник Поделиться

1) так это Java и для академических целей я предполагаю, что вы используете затмение. Нажмите CTRL-SHIFT-F для форматирования кода, и переместить все строки, в которых он крошит в случае необходимости. На keybind похож на NetBeans и IntelliJ идея по.

2) Слишком много бесполезных переменных. У вас есть дурная привычка создание переменных для разового использования, т. е. в elementOrElements(). Просто вернуть то, что send равных. Если вы хотите описать то, что делает код, а затем использовать комментарии (которые вы не используете в своей реализации кстати).

3) Если функции не очевидна, то использовать комментарии. Большинство программистов могут понять, что универсальных методов и операций похожи, но если вы сомневаетесь в комментарий. Помните, что вы пишете программного обеспечения в первую очередь для других людей. Это очень важно в профессиональной среде.

4) Удалить elementOrElements(). В один print назвать его используют просто сказать The contents of the Queue are:.

Требуется 5) последовательная переменная именования. У вас есть tmpfront, которые должны быть tempFront согласно Java конвенций. Не огромная сделка, так как вы, кажется, придерживаться этого на протяжении всей программы. Я добавить дополнительные e из личных предпочтений (и то, что она помогает другим людям чуть-чуть).

6) используйте правильную Queue соглашения об именовании, т. е. использовать enqueue вместо enQueue. Создав парочку вспомогательных методов, как isEmpty() и isFull() поможет вашей реализации в нескольких местах.

7) двигаться CircularQueue для CircularQueue.java и добавить некоторые public модификаторы для ваших методов. Это в основном для подготовки Конвенции.

2
ответ дан 15 февраля 2018 в 05:02 Источник Поделиться