반응형
스택(Stack)이란 ?
- 선형 자료구조의 한 종류로써 한쪽 끝에서만 입/출력이 일어나는 자료구조
스택의 특징
- LIFO ( Last In First Out) : 가장 나중에 추가된것이 가장 먼저 제거된다.
--> 가장 처음의 추가된것은 가장 마지막에 제거된다.
연산의 종류
- pop() : 가장 위의항목을 제거
- push() : 가장 위에 Item을 추가
- empty() : 비어있는지 검사
- peek() : 가장 위의항목을 반환 (아래 구현부에서는 top이라 칭한다)
TIP..peek와 pop의 차이점
-> pop은 제거하지만 peek는 제거가 아니다
ex) 1 2 3 이 차례대로 있는 Stack의 경우 peek를 하면 1 2 3 이 그대로 있지만 pop을 하면 1 2 만 남게된다.
스택의 구현
배열로 구현하는방법과 연결리스트로 구현하는 방법이 있다.
이 글에서는 배열로 구현해보도록 하겠다.
import java.util.Scanner;
public class StackMain {
public static void main(String[] args) {
Stack stack = new Stack();
Scanner sc = new Scanner(System.in);
int commandCnt = 0;
int value = 0;
String command = "";
commandCnt = sc.nextInt();
sc.nextLine();
for(int i=0; i<commandCnt; i++){
command = sc.nextLine();
sc.nextLine();
switch (command){
case "push":
value = sc.nextInt();
stack.push(value);
break;
case "pop":
System.out.println(stack.pop());
break;
case "top":
System.out.println(stack.top());
break;
case "empty":
System.out.println(stack.isEmpty());
break;
case "size":
System.out.println(stack.size());
break;
}
}
}
}
public class Stack{
private int top = 0;
private int maxSize = 20;
private int[] stack = new int[20];
public int size(){
return top;
}
public int isEmpty(){
int check = 0;
if(top == 0){
check = 1;
}
return check;
}
public void push(int value){
if(top >= maxSize){
}else {
stack[top++] = value;
}
}
public int pop(){
int topValue = -1;
if(top == 0){
}else{
topValue = stack[--top];
}
return topValue;
}
public int top(){
int topValue = -1;
if(top == 0){
}else{
topValue = stack[top-1];
}
return topValue;
}
}
반응형
'컴퓨터공학 기초 > 알고리즘' 카테고리의 다른 글
[알고리즘] 이진탐색트리(BST) 란 ? (0) | 2020.02.09 |
---|---|
[알고리즘] 너비우선탐색(BFS) 이란 ? (0) | 2020.02.07 |
[알고리즘] 깊이우선탐색(DFS)이란 ? (0) | 2020.02.05 |
[알고리즘] 퀵정렬이란 ? (0) | 2020.02.02 |
[알고리즘] 버블정렬이란 ? (0) | 2020.02.01 |
댓글