스택
#
Find similar titles
- (rev. 12)
- hmkim
Structured data
- Category
- Programming
Table of Contents
스택(Stack) #
정의 #
Stack이라는 단어는 차곡차곡 쌓인 더미를 의미하는데,
이는 가장 먼저 입력된 데이터가 가장 아래쪽에 쌓이고, 나중에 입력된 데이터는 그 위에 쌓이게 된다는 구조상의 특징이 마치 더미를 쌓아 올린 모습과 흡사하기 때문이다.
자료구조(Data Structure)의 한 종류로 후입선출(LIFO : List in First out)구조를 가지고 있다.
따라서 가장 먼저 들어간 데이터가 가장 끝부분에 위치하게 되는 구조이다.
이러한 특징으로 데이터 저장과 같은 기능에는 적합하나, 실시간 처리를 요구하는 구조에서는 부적합한 자료구조이다.
사용되는 기능 #
작성하는 사람마다 다소 차이가 있지만 대부분 아래의 기능으로 스택을 구현하게 된다.
- peek 또는 top : stack의 가장 위에 있는 값(현재 값)을 반환한다.
- push : stack에 데이터를 입력한다.
- pop : stack에 데이터를 삭제한다.
- empty : stack에 데이터가 없으면 참(true), 없으면 거짓(false)으르 반환한다.
간단한 예시 (JAVA) #
아래는 JAVA로 작성한 예시이다.
public class ArrayStack {
private int top;
private int maxSize;
private Object[] stackArray;
// 배열 스택 생성, 스택의 최대 크기로 생성
public ArrayStack(int maxSize){
this.maxSize = maxSize;
this.stackArray = new Object[maxSize];
this.top = -1;
}
// 스택이 비어있는지 체크
public boolean empty(){
return (top == -1);
}
// 스택이 꽉찼는지 체크
public boolean full(){
return (top == maxSize-1);
}
// 스택에 item 입력
public void push(Object item){
if(full()) throw new ArrayIndexOutOfBoundsException((top+1)+">=" + maxSize);
stackArray[++top] = item;
}
// 스택의 가장 위의 데이터 반환
public Object peek(){
if(empty()) throw new ArrayIndexOutOfBoundsException(top);
return stackArray[top];
}
// 스택의 가장 위의 데이터 제거
public Object pop(){
Object item = peek();
top--;
return item;
}
}
간단한 예시 (PYTHON) #
내장함수를 이용한 방법 #
stack_list = [1, 2, 3]
# Stack Push
stack_list.append(1)
stack_list.append(4)
print(stack_list)
#output : [1, 2, 3, 1, 4]
# Stack Pop
stack_list.pop()
print(stack_list)
#output : [1, 2, 3, 1, 4]
print(stack_list.pop())
#output : 1
print(stack_list)
#output : [1, 2, 3]
클래스를 이용한 방법 #
class stack:
def __init__(self): # 객체 생성
self.items = []
def push(self, item): # 스택 push(instance)
self.items.append(item)
def pop(self): # 스택 pop()
return self.items.pop()
def peek(self): # 스택 맨 앞 요소 리턴
return self[0]
def isEmpty(self): # 스택이 비었는지 확인
return not self.items
stack_obj = stack()
print(stack_obj.isEmpty())
# output : True
# Stack Push
stack_obj.push(1)
stack_obj.push(2)
stack_obj.push(3)
print(stack_obj.items)
# output : [1, 2, 3]
# Stack Pop
print(stack_obj.pop())
# output : 3
print(stack_obj.items)
# output : [1, 2]
print(stack_obj.peek())
# output : 1
print(stack_obj.isEmpty())
# output : False
stack_obj.pop()
stack_obj.pop()
print(stack_obj.isEmpty())
# output : True
print(stack_obj.items)
# output : []
Incoming Links #
Related Data Sciences (DataScience 0) #
Suggested Pages #
- 0.490 파이썬/라이브러리/numpy
- 0.025 Linked List
- 0.025 Array
- 0.025 Edge
- 0.025 Tree
- 0.025 Queue
- 0.025 변
- 0.025 재귀적 형태
- 0.025 포인터
- 0.025 Dequeue
- More suggestions...