데이터 구조: 대기 열의 개념 과 실현
                                            
 4754 단어  데이터 구조
                    
대열 의 개념
2. 순서 저장 구조 와 체인 저장 구조의 대기 열의 실현
대열 의 개념
대기 열 은 표 의 한 끝 에 삽입 하고 표 의 다른 한 끝 에서 삭제 합 니 다.삭 제 된 한 끝 을 팀 머리 나 팀 머리 라 고 하고 삽 입 된 한 끝 을 팀 꼬리 라 고 합 니 다.요 소 를 삽입 하 는 것 을 입 대 또는 입 대 라 고 하고 요 소 를 삭제 하 는 것 을 출 대 라 고 합 니 다.특징: 먼저 시 계 를 낸다.대기 열의 저장 구 조 는 순서 저장 구조 와 체인 저장 구조 로 나 뉜 다.
2. 순서 저장 구조 와 체인 저장 구조의 대기 열의 실현
순차 저장 구조의 대기 열 구현:
하나의 배열 과 두 개의 포인터 가 필요 합 니 다 (예 를 들 어 front). rear) 는 배열 을 이용 하여 모든 요 소 를 저장 하고 두 개의 지침 을 이용 하여 각각 팀 의 머리 와 팀 의 꼬리 를 가리 키 며 공간 을 충분히 사용 하기 위해 보통 링 대기 열, 즉 팀 의 머리 와 팀 의 꼬리 를 연결 합 니 다.팀 끝 에 요 소 를 삽입 할 때 rear = (rear + 1)% MaxSize 를 진행 합 니 다.마찬가지 로 팀 에서 요 소 를 삭제 할 때 도 front = (front + 1)% MaxSize; 이때 팀 의 빈 칸 과 팀 이 모두 rear = = front 인 것 을 발견 할 수 있 습 니 다. 팀 의 빈 칸 과 팀 이 꽉 찬 것 을 구별 하기 위해 보통 하나의 요 소 를 적 게 사용 합 니 다. 즉, (rear + 1)% MaxSize = = front 는 가득 찬 것 이 라 고 생각 하고 빈 칸 에 대한 판단 조건 은 변 하지 않 습 니 다. front = rear.
다음은 순차 저장 구조의 대기 열의 간단 한 실현 이다.
public class SelfQueueImpl {
	private static int dataLength = 2;
	public static void main(String[] args) {
		SqQueue sqQueue = new SqQueue();
		
		sqQueue.enQueue(1);
		sqQueue.enQueue(2);
		sqQueue.enQueue(3);
		
		System.out.println(sqQueue.deQueue());
		System.out.println(sqQueue.deQueue());
		System.out.println(sqQueue.deQueue());
	}
	
	static class SqQueue{
		
		private Object data[] = new Object[dataLength];
		private int front;
		private int rear;
		//  
		public void enQueue(Object element){
			if(queueIsFull()){
				System.out.println("Queue is full, enQueue failed!.");
			} else {
				data[rear] = element;
				rear ++;
				resetRear(rear);
				System.out.println("enQueue success. data[" + (rear-1) + "] = " + data[rear-1] );
			}
		}
		private void resetRear(int rear) {
			if(rear == dataLength){
				this.rear = 0;
			}
		}
		
		private boolean queueIsFull() {
			return (rear + 1) % dataLength == front;
		}
                //  
		public Object deQueue(){
			if(queueIsEmpty()){
				System.out.println("Queue is empty, deQueue failed!.");
				return null;
			} else {
				Object object = data[front];
				front ++;
				resetFront(front);
				return object;
			}
		}
		private void resetFront(int front) {
			if(front == dataLength){
				this.front = 0;
			}
		}
		private boolean queueIsEmpty() {
			return rear == front;
		}
		
	}
}출력:
enQueue success. data[0] = 1
Queue is full, enQueue failed!.
Queue is full, enQueue failed!.
1
Queue is empty, deQueue failed!.
null
Queue is empty, deQueue failed!.
null링크 저장 구조의 대기 열 구현:
링크 저장 구조 에 대해 순환 링크 의 개념 도 없고 팀 이 꽉 찬 개념 도 없다.팀 이 비어 있 는 것 에 대해 서 는 프런트 와 rear 를 유지 하기 때문에 그 중 하나 가 비어 있 는 지 판단 하면 됩 니 다.
다음은 체인 저장 구조의 간단 한 실현 이다.
public class SelfQueueImpl_List {
	public static void main(String[] args) {
		SqQueue sqQueue = new SqQueue();
		
		sqQueue.enQueue(1);
		sqQueue.enQueue(2);
		sqQueue.enQueue(3);
		
		System.out.println(sqQueue.deQueue());
		System.out.println(sqQueue.deQueue());
		System.out.println(sqQueue.deQueue());
		System.out.println(sqQueue.deQueue());
		
	}
	
	static class SqQueue{
		
		private QNode front;
		private QNode rear;
		
		//  
		public void enQueue(Object object){
			
			if(QueueIsEmpty()){
				insert1(object);
			} else{
				insert2(object);
			}
			System.out.print("enQueue success. Queue is ");
			printQueue();
		}
		private void printQueue() {
			QNode flag = this.front;
			while(flag != null ){
				System.out.print(" " + flag.getObject());
				flag = flag.getNext();
			}
			System.out.print("
");
		}
		private void insert1(Object object) {
			QNode qNode = new QNode(object);
			this.front = qNode;
			this.rear = qNode;
		}
		private void insert2(Object object) {
			rear.setNext(new QNode(object));
			rear = rear.getNext();
		}
		private boolean QueueIsEmpty() {
			return this.front == null;
		}
		
		//  
		public Object deQueue(){
			if(QueueIsEmpty()){
				System.out.println("Queue is empty, deQueue failed!.");
				return null;
			} else {
				Object object = front.getObject();
				front = front.next;
				return object;
			}
		}
	}
	static class QNode{
		private Object object;
		private QNode next;
		
		public QNode(Object object){
			this.object = object;
		}
		
		public Object getObject(){
			return this.object;
		}
		
		public QNode getNext(){
			return this.next;
		}
		public void setNext(QNode qNode){
			this.next = qNode;
		}
	}
}출력:
enQueue success. Queue is  1
enQueue success. Queue is  1 2
enQueue success. Queue is  1 2 3
1
2
3
Queue is empty, deQueue failed!.
null다음 편 에 서 는 자바 의 대기 열 시스템 구 조 를 소개 합 니 다.
참고: 자바 큐 에서 remove / poll, add / offer, element / peek 차이
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.