자료구조

정적바인딩 원형 큐(Circulation Queue)

제주도소년 2020. 2. 18. 21:01
public class Memory {
	// 원형 큐의 후단을 관리하기 위한 인덱스
	// 스택의 전단과 후단을 관리하기 위해 사용하는 인덱스
	protected int rear;
	protected int[] arr;
	protected int maxSize;

	public Memory(int num) {
		rear = 0;
		maxSize = num;
		arr = new int[num];

	}

	public void push(int num) {
		rear = (rear + 1) % maxSize;
		arr[rear] = num;
	}

	public void disp() {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "\t");
		}
		System.out.println("");
	}

	public void setLast_index(int rear) {
		this.rear = rear;
	}

}

public class myQueue extends Memory {
	// 원형 큐의 전단을 관리하기 위한 인덱스
	private int front;

	public myQueue(int num) {
		super(num);
		front = 0;
	}

	public boolean isFull() {
		return ((rear + 1) % maxSize == front);
	}

	public void pop() {
		front = (front + 1) % maxSize;
		arr[front] = 0;
	}

	// 큐의 공백을 검사하는 함수
	// 큐의 전단과 마지막을 가리키는 위치가 같으면 공백상태임
	public boolean empty() {
		return (front == rear);
		// 전단과 후단이 같으면 true 즉 공백
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		boolean b = true;
		int num, pushData;

		myQueue my = new myQueue(6);
		do {
			System.out.println("[Queue] 1.push\t2.pop\t3.display");
			num = sc.nextInt();
			switch (num) {
			case 1:
				if (my.isFull()) {
					System.out.println("에러..... 큐가 가득 찼습니다..!!!");
					break;
				} else {
					System.out.print("Queue Data Push :");
					pushData = sc.nextInt();
					my.push(pushData);
				}
				break;
			case 2:
				if (my.empty()) {
					System.out.println("큐에 데이터가 없어서 삭제 못함!!!");
					break;
				} else {
					my.pop();
					break;
				}
			case 3:
				if (my.empty()) {
					System.out.println("큐에 데이터가 없어서 볼 필요없음!!");
					break;
				} else {
					my.disp();
					break;
				}
			}
		} while (b);
		sc.close();

	}

}

* 예외처리 같은거 귀찮아서 안함.. 수정해서 재업로드 예정!!

 

'자료구조' 카테고리의 다른 글

Stack (노드 개념 적용)  (0) 2020.02.18
ArrayList  (0) 2020.02.13
연결리스트(Linked List)  (0) 2020.02.13
리스트 (LIST)  (0) 2020.02.13
자료구조와 알고리즘  (0) 2020.01.15