cs/자료구조
[자료구조]스택(stack)의 개념과 구현(Java)
천방지축 개발자
2023. 7. 9. 18:18
stack이란 자료구조에 대해 알아보겠습니다.
스택(Stack)은 컴퓨터 과학에서 중요한 개념 중 하나입니다. 위에 테니스 공 통에 테니스 볼을 넣는 거와 같이 한쪽 끝에서 입력과 출력이 이루어지고 마지막에 들어간 공이 먼저 꺼낼 수 밖에 없는 것처럼(Last In First Out) 스택이란 자료구조도 동일하게 작동하는 자료구조 입니다.
스택이란?
- 삽입과 삭제 연산이 한쪽 끝에서 이루어지는 자료구조
- LIFO (Last In First Out)
스택을 구현할 수 있는 방법?
- 배열→ 구현이 쉬우나 정적인 크기라 제한이 있음
- 리스트 ( 연결리스트 ) → 구현이 배열에 비해 어려우나 자료구조의 크기가 동적이다는 장점이 있음
이 글에서는 배열로 구현한 예만 보여드립니다. 연결리스트 구현이 그렇게 어려운 것 아니므로 배열 구현을 보고 직접 구현해보시는 걸 추천합니다.
스택 기초 연산 함수
empty: 스택이 비어 있는지 검사
full: 스택이 가득 차있는지 검사
push: 스택에서 데이터를 삽입
pop: 스택에서 데이터를 삭제
스택 응용
- 함수호출, 미로 게임, 백 트래킹, 수식 계산 등, 재귀함수
배열 스택의 자료구조
- top 인덱스: 자료의 삽입과 삭제가 이루어지는 인덱스 변수
top 인덱스는 stack 배열의 마지막에 입력된 데이터를 가리키는 인덱스입니다.
- 자료 삽입(push): top++, 자료 삭제(pop): top—
삽입되거나 삭제되면 top이 제일 나중에 입력된 data를 가리키게 해야 합니다.
배열 스택 구현
public class Stack<E> {
private E[] stack;
private int top;
private int size;
public Stack(){
this(10);
}
public Stack(int size){
this.size = size;
top = -1; //top의 초기값
stack = (E[])new Object[size];
}
public boolean empty(){
return top == -1; // stack이 비어있으면 true 아니면 false
}
public boolean full(){
return top == size; // stack 이 가득차 있으면 ture 아니면 false
}
public void push(E data){ //삽입
if (this.full()){
return;
}
else{
this.top++;
this.stack[top] = data;
return;
}
}
public E pop(){ //삭제
if (this.empty()){
return null;
}
else{
E temp = this.stack[top];
top--;
return temp;
}
}
}
수행시간
1. 삽입(push) 함수 : O(1)
2. 삭제(pop) 함수 : O(1)
<이미지 참고>
- Applications of Stack in Data Structure - javatpoint
-