스택과 큐의 차이점이 앞에서 꺼내느냐 뒤에서 꺼내느냐에 있으니 , 이전에 구현해 놓은 스택을 대상으로 꺼내는 방법만 조금 변경하면 큐가 될 것 같다. 라고 착각을 했지만
큰 차이가 있다
아래는 enqueue 과정 입니다.
배열 A 1
F R
enqueue 1 2
F R
enqueue 1 2 3
F R
위 배열은 F 가 가리키는 것이 큐의 머리이고 , R 이 가리키는 것이 큐의 꼬리 이다 .
따라서 enqueue 연산 시 R이 그다음 칸을 가리키게 되고 그자리에 새데이터가 저장된다
그렇다면 dequeue 연산 시에는 어떠한 데이타를 반환 하고 소멸해야 하겠는가? F가 가리키는 데이터가 저장 순서가 가장 앞선 데이터이므로 F가 가리키는 데이터를 대상으로 dequeue 연산을 진행해야한다
즉 F를 참조하여 dequeue 연산을 하고 , R 을 참조하여 enqueue 연산을 한다 .
즉 큐는 뒤로넣고 앞으로 빼는 자료구조이다.
package Datastructure;
/*
* isEmpty -- empty 상태인지 확인
* clear -- 큐내부의 모든 자료들을 삭제한다
* isFull
* enQueue-- que의 rear부분에 새로운 데이터 삽입
* dequeue-- que의 front 부분에서 가장 front쪽의 데이터를 삭제
* peek -- front 위치의 데이터를 반환
*/
public class Quepractice {
Object queue[];
int rear ;// enqueue에 이용
int front ;// dequeue에 이용
int size ;
public Quepractice(int size){
queue=new Object[size];
rear=front=-1;
this.size=size;
}
public boolean isempty(){
if(rear==-1){
return true;
}
else{
return false;
}
}
public boolean isfull(){
if(rear==this.size -1){
return true;
}
else{
return false;
}
}
public void clear(){
}
public void enqueue(Object input){
if(isfull()){
System.out.println("error");
}else{
rear++;
queue[rear]=input;
}
}
public void dequeue(){
if(this.front>this.size-1){
System.out.println("error");
return;
}
else{
this.front++;
queue[front]=0;
rear--;
}
}
public Object peek(){
System.out.println(queue[rear]);
return queue[rear];
}
public void see(){
for(int i=0; i<rear+1; i++){
System.out.println(queue[i]);
}
}
public static void main(String[] args) {
Quepractice q= new Quepractice(6);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
q.enqueue(4);
q.enqueue(5);
q.enqueue(6);
//q.enqueue(7);// 6개 공간만 만들어졌다 배열은 인덱스 6까지로 착각함
q.dequeue();
q.dequeue();
q.dequeue();
q.dequeue();
q.dequeue();
q.dequeue();
//q.dequeue(); //7번째 아웃오브 인덱스 뜸
q.see();
//System.out.println(q.isfull());
//System.out.println(q.isempty());
// test
/* int a[]= new int [6];
for(int i=0; i<a.length;i++){
System.out.println(i);
}*/
}
}
'자료구조' 카테고리의 다른 글
배열 기반의 힙 , 우선순위 큐 구현 하기 (0) | 2015.05.31 |
---|---|
우선순위 큐 정리 (0) | 2015.05.31 |
힙 정리 (0) | 2015.05.30 |
스택 정리 소스 (0) | 2015.05.29 |
링크드 리스트 전체 소스 (0) | 2015.05.29 |