※ 스택의 구현
- 순차 자료구조를 이용한 방식
- 연결 자료구조를 이용한 방식
※ 순차 자료구조를 통한 구현
- 차원 배열 stack[n]을 사용할 때 n이 스택의 크기가 되며 top이 n보다 클 수 없다.
- 스택에 원소가 쌓이는 순서를 배열의 인덱스로 표현한다. 가장큰 인덱스가 top이된다.
- top은 0부터 n-1의 인덱스를 저장하므로, 스텍이 초기상태(공백스택, 스택에 값이 없을 때) top에는 -1을 저장한다.
※ 순차 자료구조를 통한 구현 소스
interface Stack
interface Stack{
boolean isEmpty(); //스택이 공백스택인지 확인하는 함수
void push(char item); //문자를 push하는 함수
char pop(); //pop 하는 함수(top에 있는 원소를 삭제하고 반환하는 연산)
void delete(); //top에있는 원소를 삭제한느 연산
char peek(); //top에 있는 원소를 반환하는 연산
}
arrayStack
public class ArrayStack implements Stack {
private int stackSize;
private int top;
private char ArrayItem[];
public ArrayStack(int stackSize){
this.top = -1;
this.stackSize = stackSize;
this.ArrayItem = new char[stackSize];
}
@Override
public boolean isEmpty() {
if(top == -1){
return true;
}else{
return false;
}
}
@Override
public void push(char item) {
if(top>this.stackSize-1){
System.out.println("error : stack is full");
return;
}else{
ArrayItem[++top] = item;
}
}
@Override
public char pop() {
if(isEmpty()){
System.out.println("error : stack is empty");
return 0;
}else{
return ArrayItem[top--];
}
}
@Override
public void delete() {
if(isEmpty()){
System.out.println("error : stack is empty");
}else{
top --;
}
}
@Override
public char peek() {
if(isEmpty()){
System.out.println("error :stack is empty");
return 0;
}else{
return ArrayItem[top];
}
}
public void printStack(){
for(int i =0; i <=top ; i++){
System.out.print("index : " + i + " value : " + ArrayItem[i] +" / ");
}
System.out.println();
}
}
main
public class Main {
public static void main(String[] args) {
int stackSize =8;
char deleteItem;
ArrayStack stack = new ArrayStack(stackSize);
stack.push('A');
stack.printStack();
stack.push('B');
stack.printStack();
stack.push('C');
stack.printStack();
deleteItem = stack.pop();
System.out.println("delete item : " + deleteItem);
stack.printStack();
System.out.println("peek value : " + stack.peek());
stack.delete();
System.out.println("top value : " + stack.peek());
}
}
※ 코드 리뷰
코드 자체에 어려운 내용은 없지만 연산자의 기본에 대해 다시한번 학습하는 계기가 됐다
++top과 top++ 처럼 연산자가 앞에 붙은것과 뒤에붙은 것에는 큰 차이가 있다.
연산자가 앞에 붙으면 어떤 연산을 하기전 ++을 하고 연산을 한다는 것이고 연산자가 뒤에 붙으면 어떤 연산을 한 후 ++ 한다는 것이다. 그래서
ArrayItem[++top] = item;
이 내용은
top++;
ArrayItem[top]
와 같고
return ArrayItem[top--];
이 내용은
return ArrayItem[top];
top --;
코드적으론 오류가 있지만 개념적으론 이런식이다.
또한 if(true) 이듯 if의 조건안에 boolean값을 리턴하는 함수를 넣어서 이용할 수 있다는 것을 알았다.
'플밍 is 뭔들 > 자료구조' 카테고리의 다른 글
03-4 스택의 응용 (0) | 2016.11.25 |
---|---|
03-3 스택의 구현(연결 자료구조 방식) (0) | 2016.11.25 |
03-1 스택 (0) | 2016.11.25 |
02-4 이중 연결 리스트 (0) | 2016.11.25 |
02-3 원형 연결 리스트 (0) | 2016.11.25 |