링크 기반, 배열 구현 대기 열, 순환 대기 열
1. 대기 열의 인터페이스
public interface QueueADT {
//
public void enqueue(Object element);
//
public Object dequeue();
//
public Object first();
//
public boolean isEmpty();
//
public int size();
public String toString();
}
2. 링크 구현 대기 열
public class LinkedQueue implements QueueADT {
// , ,
class Node {
int data; //
Node next;//
public Node(int data) {
this.data = data;
}
}
// 、
private Node front,rear;
//
private int count;
public LinkedQueue() {
front=null;
rear=null;
count=0;
}
// , , ,
// ,
@Override
public void enqueue(Object element) {
Node node=new Node((Integer)element);
if(isEmpty()){
front=rear=node;
}else{
rear.next=node;
rear=node;
}
count++;
}
@Override
public Object dequeue() {
if(isEmpty()){
System.out.println(" ");
System.exit(1);
}
Object result=front.data;
front=front.next;
count--;
return result;
}
@Override
public Object first() {
return front.data;
}
@Override
public boolean isEmpty() {
return (size()==0);
}
@Override
public int size() {
return count;
}
public static void main(String[] args) {
LinkedQueue queue = new LinkedQueue();
System.out.println(" 0 9 , 5 ");
for(int i = 0;i < 10;i++)
queue.enqueue(i);
for(int i = 0;i < 5;i++)
queue.dequeue();
System.out.println(" : " + queue.size());
System.out.println(" ?: " + queue.isEmpty());
System.out.println(" : " + queue.first());
}
}
3. 배열 구현 대기 열
// , , , , ,
public class ArrayQueue implements QueueADT {
private Object[] contents;
// ,rear ,
private int rear;
private static int SIZE = 10;
public ArrayQueue(){
contents = new Object[SIZE];
rear = 0;
}
public void expand(){
Object[] larger = new Object[size()*2];
for(int index = 0;index < rear;index++)
larger[index] = contents[index];
contents = larger;
}
@Override
public void enqueue(Object element) {
if(rear == contents.length)
expand();
contents[rear] = element;
rear++;
}
@Override
public Object dequeue() {
if(isEmpty()){
System.out.println(" ");
System.exit(1);
}
Object result = contents[0];
// ,
for(int index = 0;index < rear;index++)
contents[index] = contents[index+1];
rear--;
return result;
}
@Override
public Object first() {
return contents[0];
}
@Override
public boolean isEmpty() {
return (size()==0);
}
@Override
public int size() {
return rear;
}
}
4. 배열 순환 대기 열 실현
// , , ,
public class CircularArrayQueue implements QueueADT{
private Object[] contents;
private int front,rear;//front ,rear
private int count;//
private static int SIZE = 10;
public CircularArrayQueue(){
contents = new Object[SIZE];
front = -1;
rear = 0;
count = 0;
}
// , ,
@Override
public void enqueue(Object element) {
if(isEmpty()){
contents[0]=element;
front=0;
rear=1;
count++;
}else{
contents[rear]=element;
rear=(rear+1)%contents.length;
count++;
}
}
@Override
public Object dequeue() {
if(isEmpty()){
System.out.println(" !!!");
System.exit(1);
}
Object result = contents[front];
front = (front + 1) % contents.length;
count--;
return result;
}
@Override
public Object first() {
return contents[front];
}
@Override
public boolean isEmpty() {
return (size()==0);
}
@Override
public int size() {
return count;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.