>  기사  >  Java  >  순환 대기열 Java

순환 대기열 Java

WBOY
WBOY원래의
2024-08-30 15:08:27512검색

다음 문서에서는 순환 대기열 Java에 대한 개요를 제공합니다. 순환 큐는 선형 데이터 구조이며 단순 큐와 마찬가지로 FIFO(선입선출) 방식으로 작업이 수행됩니다. 순환 대기열에서는 마지막 위치가 첫 번째 위치와 연결되어 원을 만듭니다. 링 버퍼라고도 합니다. 단순한 큐 구조에서는 뒤쪽이 큐의 끝에 도달하면, 즉 큐가 가득 차면 시작 요소의 공간이 비어 있어 활용이 불가능할 가능성이 있습니다. 이러한 대기열 제한은 원형 대기열에 의해 해결됩니다. 이번 주제에서는 순환큐 자바(Circular Queue Java)에 대해 알아보겠습니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문:

다음은 Java 프로그램에서 순환 대기열을 사용하는 기본 구문입니다.

Java에서 작동과 함께 순환 대기열을 생성하는 방법은 무엇입니까?

순환 대기열의 생성과 작동을 자세히 살펴보겠습니다.

순환 대기열에서 수행되는 기본 작업은 다음과 같습니다.

  1. 앞면: 큐의 첫 번째 요소를 가리키는 데 사용됩니다.
  2. 뒤: 큐의 마지막 요소를 가리키는 데 사용됩니다.
  3. Enqueue(value): 큐에 요소를 삽입할 때 사용하는 함수입니다. Queue의 요소는 뒤쪽 위치에 삽입됩니다.
  4. Dequeue(): 이 함수는 대기열의 요소를 삭제하는 데 사용됩니다. Queue의 기본 특성상 요소 삭제는 Queue의 맨 앞에서 이루어집니다.

다음은 순환 대기열에서 요소를 생성, 삽입 또는 삭제하는 동안 수행되는 단계입니다.

  • 처음에는 Front와 Rear의 값이 -1로 설정되어 있습니다.
  • 인큐(값) 작업:
  • 큐에 첫 번째 요소를 삽입하면 전면과 후면이 모두 0으로 설정됩니다.
  • 큐에 새 요소를 삽입하면 후면은 후면 + 1이 됩니다.
  • 후방 위치에 새로운 요소가 추가되었습니다.
  • 뒤쪽은 순환 방식으로 증가합니다. 즉, 끝에 도달하여 대기열이 가득 차면 대기열의 시작을 가리킵니다.
  • 큐에서 제거 작업 중:
  • 먼저 대기열이 비어 있는지 확인합니다. 앞== 뒤== -1의 평균은 큐가 비어 있고 삭제를 수행할 수 없음을 의미합니다.
  • 큐에 요소가 1개만 있는 경우(예: front == Rear) 해당 요소를 삭제하고 front == Rear == -1로 설정합니다.
  • 큐에 요소가 있으면 앞쪽에서 가리키는 값은 삭제되고 순환적으로 앞쪽 인덱스가 1씩 증가합니다.

순환 대기열에서 작업하는 동안 다음 시나리오를 염두에 두어야 합니다.

  1. front = 0이고 Rear = 크기 -1인 경우 대기열이 가득 찼습니다. 즉, 앞면이 첫 번째 위치를 가리키고 뒷면이 마지막 위치를 가리킵니다. 따라서 대기열이 가득 차서 삽입이 불가능합니다.
  2. front = Rear+1인 경우 대기열이 가득 찼습니다. 즉, 너무 많이 삭제한 후 앞쪽이 대기열의 위치 3에 있고 순환 방식으로 삽입한 후 뒤쪽이 위치 2에 있으면 목록이 가득 차고 더 이상 삽입이 불가능합니다.
  3. front!= 0이고 Rear = max-1인 경우 대기열이 가득 차지 않습니다. 즉, 대기열 시작 부분에 비어 있는 위치가 있으므로 삽입이 발생할 수 있음을 의미합니다.
  4. rear!= size-1인 경우 mod(size)를 사용하여 후면을 더 늘릴 수 있으므로 새 값을 삽입할 수 있습니다.

다음은 Java 프로그램에서 순환 대기열의 구현을 보여주는 예입니다.

  • 대기열에 요소 삽입
  • 빈 대기열의 항목 표시
  • 대기열에 요소 삽입
  • 대기열에서 요소 제거
  • 전체 대기열에 요소 삽입
  • 전면 및 후면 위치와 함께 대기열의 요소를 표시합니다.
public class CirQueue {
// Defining the size of Circular Queue
int SIZE = 5;
int front, rear;
int queue[] = new int[SIZE];
//creating the constructor of the above class
CirQueue() {
front = -1;
rear = -1;
}
// Implementing the 2 scenarios to check if the queue is full or not
boolean isFullQueue() {
if (front == 0 && rear == SIZE - 1) {
return true;
}
if (front == rear + 1) {
return true;
}
return false;
}
// Check if the queue is empty or not
boolean isEmptyQueue() {
if (front == -1)
return true;
else
return false;
}
// Adding an element in the queue
void enQueue(int value) {
if (isFullQueue()) {
System.out.println("Sorry !! Queue is full.. No more elements could be inserted in it");
}
else {
// if there is no element in the queue
if (front == -1)
front = 0;
// incrementing the rear position in circular manner using modulo operator
rear = (rear + 1) % SIZE;
//placing the value at the rear position
queue[rear] = value;
System.out.println("Element " + value + " is inserted successfully");
}
}
// Deleting the element from the queue
void deQueue() {
int value;
// checking of the queue is empty or not
if (isEmptyQueue()) {
System.out.println("Sorry !!The Queue is empty.. ");
} else {
value = queue[front];
// if there is only one element in the queue
if (front == rear) {
front = -1;
rear = -1;
}
else {
// Incrementing the front in a circular manner
front = (front + 1) % SIZE;
}
}
}
// Displaying the elements of the Circular queue
void displayQueue() {
int i;
if (isEmptyQueue()) {
System.out.println("Sorry!! The Queue is Empty");
} else {
System.out.println("Position of Front:  " + front);
System.out.println("Below given are the elements of the Queue");
for (i = front; i != rear; i = (i + 1) % SIZE)
System.out.print(queue[i] + " ");
System.out.println(queue[i]);
System.out.println("Position of Rear: " + rear);
}
}
// Main function to drive the code
public static void main(String[] args) {
// creating the object of the class to call the methods
CirQueue que = new CirQueue();
// Queue is empty. No element is inserted as of now
que.deQueue();
que.enQueue(10);
que.enQueue(24);
que.enQueue(33);
que.enQueue(67);
que.enQueue(22);
que.displayQueue();
que.deQueue();
que.displayQueue();
que.enQueue(900);
que.displayQueue();
// Element cannot be inserted as the queue is full
que.enQueue(867);
que.deQueue();
que.displayQueue();
}
}

출력:

순환 대기열 Java

다음은 순환 대기열에서 다양한 삽입 및 삭제 후의 출력 스크린샷입니다.

결론

위의 설명은 CIrcular Queue가 무엇인지, 그리고 모든 프로그래밍 언어에서 어떻게 작동하는지 명확하게 설명합니다. 일반 큐의 한계를 해결하기 위해 순환 큐가 도입되었습니다. 작업에 앞서 프로그래머가 Queue를 먼저 이해하고 실제 프로그램에서 구현하는 것이 매우 중요합니다.

위 내용은 순환 대기열 Java의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java의 페이지 매김다음 기사:Java의 페이지 매김