데이터 삽입 : push
데이터 최상위 값 빼기 : pop
비어있는 지 확인 : empty
꽉 차있는지 확인 : isFull
+)
private int sp = -1; // 스택 포인터(sp)는 기본값이 -1
public void push(Object o) {
if(isFull(o)) {
return;
}
stack[++sp] = o;
}
public void push(Object o) {
if(isFull(o)) {
return;
}
stack[++sp] = o;
}
private boolean isEmpty(int cnt) {
return sp == -1 ? true : false;
}
private boolean isFull(int cnt) {
return sp + 1 == MAX_SIZE ? true : false;
}
+) 위처럼 Array이외의 Linked List나 arraycopy를 활용하면 동적 배열 스택을 만들 수도 있다.
데이터 삽입 : enQueue
데이터 빼기 : deQueue
비어있는 지 확인 : isEmpty
꽉 차있는지 확인 : isFull
+)
// 기본값
private int size = 0;
private int rear = -1;
private int front = -1;
Queue(int size) {
this.size = size;
this.queue = new Object[size];
};
public void enQueue(Object o) {
if(isFull()) {
return;
}
queue[++rear] = o;
}
public Object deQueue(Object o) {
if(isEmpty()) {
return null;
}
Object o = queue[front];
queue[front++] = null;
return o;
}
public boolean isEmpty() {
return front == rear;
}
public boolean isFull() {
return (rear == queueSize-1);
}
+) rear가 끝에 도달하기만 해도 Full상태로 되기 때문에 원형 큐를 이용하면 해결할 수 있다.
원형 큐: 배열의 처음과 끝이 연경되어 있는 것으로 간주한 자료구조
// (index + 1) % size로 순환시킨다 public boolean isFull() { return ((rear+1) % size == front); }