스택은 데이터를 저장하고 사용하는 여러 자료구조 중 하나의 방법이다. 스택은 책을 엎어서 쌓아놓은 구조라고 생각하면 이해하기 편하다. 책을 제일 위에 차곡 차곡 쌓다보면 후에 책을 찾을 때, 제일 위에 있는 책을 꺼내야만 한다.
스택의 값 삽입 [Push]
파란색 상자는 스택을 나타내고, 보라색 상자는 삽입을 하려는 데이터이다.
데이터는 스택의 가장 상단부터 차곡 차곡 쌓이게 된다. 값을 삽입하는 것을 push
라고 한다.
스택의 값 추출
스택에서 값을 추출하게 되면 상단의 데이터부터 차례대로 추출된다. 값을 추출하는 것을 pop
이라고 한다.
예제 코드
Stack.java
public interface Stack {
public boolean isEmpty();
public boolean full();
public void push(Object item);
public Object pop();
public Object peek();
}
스택의 기본 동작을 정의한 interface.
- isEmpty() : 스택이 비어있는지 확인하는 메소드
- full() : 스택이 꽉찼는지 확인하는 메소드
- push() : 스택에
Object item
을 저장하는 메소드 - pop() : 스택에서 값을 pop한다. pop한 값을 리턴한다.
- peek() : 스택 상단의 값을 리턴한다. 하지만 pop은 아니기 때문에 스택 상단의 값은 변하지 않는다.
ArrayStack.java
public class ArrayStack implements Stack{
// stack 상단을 가르키는 변수
private int top;
// stack 의 크기
private int maxSize;
// 데이터를 저장하는 스택
private Object stackArray[];
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
this.stackArray = new Object[this.maxSize];
this.top = -1; // no element
}
public boolean isEmpty() {
// if this.top is -1, stack has no element
return ( this.top == -1 );
}
public boolean full() {
// check the stack is full
return ( this.top == this.maxSize-1 );
}
public void push(Object item) {
// insert to stack
if(full()) {
System.out.println("Stack is Full.");
return ;
}
// insert object to stack
top ++;
stackArray[top] = item;
}
public Object pop() {
Object item = peek();
if(!isEmpty()) top --;
return item;
}
public Object peek() {
if(isEmpty()) {
System.out.println("Stack is Empty");
return null;
}else {
Object item = stackArray[top];
return item;
}
}
}
Main.java
public class mainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayStack stack = new ArrayStack(10);
if(stack.isEmpty()) {
String str = new String("hello world");
stack.push(str);
System.out.println(stack.peek());
String str1 = new String("hello world1");
stack.push(str1);
System.out.println(stack.peek());
String str2 = new String("hello world2");
stack.push(str2);
System.out.println(stack.peek());
String str3 = new String("hello world3");
stack.push(str3);
System.out.println(stack.peek());
// delete element
System.out.println(stack.pop());
System.out.println(stack.peek());
Integer i = new Integer(100);
stack.push(i);
System.out.println(stack.peek());
Integer i1 = new Integer(200);
stack.push(i1);
System.out.println(stack.peek());
Integer i2 = new Integer(300);
stack.push(i2);
System.out.println(stack.peek());
Integer i3 = new Integer(400);
stack.push(i3);
System.out.println(stack.peek());
}
}
Comments