Array, 배열은 JavaScript, Python 을 넘어서 모든 프로그래밍 언어에서 가장많이 사용되는 자료구조 입니다.
마지막으로 들어온 데이터가 가장 먼저 나간다.
스택이라는 자료구조는 우리 삶에 사실 엄청나게 밀접합니다. 위의 그림에서도 볼 수 있듯이 맛있는 아이스크림의 콘 위에 쌓이는 것도 스택, 읽을 책들을 쌓아두는 것도 스택입니다.
아이스크림 한 스쿱, 읽을 책도 결국 데이터가 아닌가요? 우리는 데이터와 함께 살아갑니다.
Q. 그렇다면 스택의 특징은 무엇일까요?
이 특징으로 인해 컴퓨터의 세계에서는 어떻게 스택이 사용될까요? 몇가지 예를 살펴보겠습니다.
cd
(Change Directory), pwd
(현재경로를 알아보는) 명령어처음으로 들어온 데이터가 가장 먼저 나간다.
큐 라는 자료구조도 우리의 일상생활에서 떼려야 뗄 수 없습니다. 위의 사진만 봐도 알겠죠?
우리는 마트에서 장을 볼 때, 버스를 기다릴 때, 놀이공원에서 줄을 설 때, 모두 큐에 들어간 데이터와 같습니다. 큐는 공평하죠. 왜냐하면 가장 먼저 줄을 선 사람이 가장 먼저 계산대를 거치고, 버스에 타고, 놀이기구에 탑승합니다.
Q. 그렇다면 큐의 특징은 무엇일까요?
#stack.py**
```python
class Stack:
def __init__(self):
self.state = []
def push(self, data):
# 데이터를 스택에 push 하는 것을 구현 해 주세요
return self.state.append(data)
def pop(self):
# 데이터를 스택에서 pop 해서 그 값을 리턴하도록 구현 해 주세요
value = self.state.pop()
if value is not None:
return value
else:
print('Stack is empty.')
def getPeak(self):
# 스택의 최상위 값을 리턴하도록 구현 해 주세요
if self.state:
return self.state[-1]
else:
print('Stack is empty.')
def isEmpty(self):
# 데이터가 stack에 있는지 유무 파악
return not bool(self.state)
def size(self):
# stack에 몇개의 값이 있는지 확인
return len(self.state)
def __repr__(self):
return repr(self.state)
if __name__ == '__main__':
stack = Stack()
print('스택이 비었나요?: {}'.format(stack.isEmpty()))
print('스택에 숫자 0-9를 추가합니다.')
for i in range(10):
stack.push(i)
print('스택 크기 : {0}'.format(stack.size()))
print('size: {}'.format(stack.size()))
print('getPeak: {}'.format(stack.getPeak()))
print('pop: {}'.format(stack.pop()))
print('getPeak: {}'.format(stack.getPeak()))
print('Empty??? {}'.format(stack.isEmpty()))
print(stack)
스택이 비었나요?: True
스택에 숫자 0-9를 추가합니다.
스택 크기 : 10
size: 10
getPeak: 9
pop: 9
getPeak: 8
Empty??? False
[0, 1, 2, 3, 4, 5, 6, 7, 8]
class Queue:
def __init__(self):
self.state = []
def enqueue(self, data):
# queue 뒤쪽에 항목을 삽입합니다.
self.state.insert(0, data)
def dequeue(self):
# Queue앞 쪽의 항목을 반환하고, 제거
value = self.state.pop()
if value is not None:
return value
else:
print('Queue is empty.')
def getPeak(self):
# 스택의 최상위 값을 리턴하도록 구현 해 주세요
if self.state:
return self.state[-1]
else:
print('Stack is empty.')
def isEmpty(self):
# 데이터가 stack에 있는지 유무 파악
return not bool(self.state)
def size(self):
# stack에 몇개의 값이 있는지 확인
return len(self.state)
def __repr__(self):
return repr(self.state)
if __name__ == '__main__':
queue = Queue()
print('스택이 비었나요?: {}'.format(queue.isEmpty()))
print('스택에 숫자 0-9를 추가합니다.')
for i in range(10):
queue.enqueue(i)
print('스택 크기 : {0}'.format(queue.size()))
print('size: {}'.format(queue.size()))
print('getPeak: {}'.format(queue.getPeak()))
print('pop: {}'.format(queue.dequeue()))
print('getPeak: {}'.format(queue.getPeak()))
print('Empty??? {}'.format(queue.isEmpty()))
print(queue)
Queue 비었나요?: True
Queue 숫자 0-9를 추가합니다.
Queue크기 : 10
size: 10
getPeak: 0
pop: 0
getPeak: 1
Empty??? False
[9, 8, 7, 6, 5, 4, 3, 2, 1]