👀 스택과 큐란?
: 스택과 큐는 들어가고 나오는 곳이 정해져 있는 자료구조입니다!
👀 스택이란?
👉 한쪽 끝으로만 자료를 넣고 뺄 수 있는 자료 구조를 말합니다. (선입후출?)
실생활적인 예시를 들어 보자면
스택이라는 자료 구조는 "빨래통"을 떠올리시면 됩니다.
데이터를 한 곳에서만 넣었다 뺄 수 있습니다.
가장 밑에 있는 빨래를 뺄 수 있나요? 아니요!!
가장 위에 있는 빨래를 빼거나 넣을 수 있습니다.
그러면 가장 처음에 넣은 빨래는? 가장 늦게 나오겠죠!!
가장 마지막에 넣은 빨래는? 가장 빨리 나옵니다!!
이런 자료 구조를 Last In First Out이라고 해서 LIFO라고 부릅니다.
👀 그렇다면 이런 자료구조는 왜 필요할까요?
👉 바로, 넣은 순서를 쌓아두고 있기 때문입니다. 그 순서가 필요한 경우가 있습니다.
예를 들어 컴퓨터의 되돌리기(Ctrl + Z) 기능을 아시나요??
직전에 했던 행동을 되돌리고 싶을 때 사용하는 기능으로써 이를 위해서는 내가 했던 행동들을 순서대로 기억해야 하므로 스택을 사용합니다.
👀 스택의 구현은??
👉 스택이라는 자료 구조에서 제공하는 기능은 다음과 같습니다.
1) push(data) : 맨 앞에 데이터 넣기
def push(self, value): # 현재 [4] 밖에 없다면
new_head = Node(value) # [3] 을 만들고!
new_head.next = self.head # [3] -> [4] 로 만든다음에
self.head = new_head # 현재 head의 값을 [3] 으로 바꿔준다.
2) pop() : 맨 앞의 데이터 뽑기
def pop(self):
if self.is_empty(): # 만약 비어있다면 에러!
return "Stack is empty!"
delete_head = self.head # 제거할 node 를 변수에 잡습니다.
self.head = self.head.next # 그리고 head 를 현재 head 의 다음 걸로 잡으면 됩니다.
return delete_head # 그리고 제거할 node 반환
3) peek() : 맨 앞의 데이터 보기
def peek(self):
if self.is_empty():
return "Stack is empty!"
return self.head.data
4) isEmpty() : 스택이 비었는 지 안 비었는 지 여부 반환 해주기
def is_empty(self):
return self.head is None
👀 스택은 뭘로 구현하면 좋을까요??
👉 데이터를 넣고 뽑는 걸 자주하는 자료구조 입니다.
👉 링크드 리스트와 유사하게 구현 할 수 있습니다.
👀 큐란?
👉 한쪽 끝으로 자료를 넣고, 반대쪽에서는 자료를 뺄 수 있는 선형 구조 (선입선출?)
실생활적인 예시를 들어 보겠습니다.
큐란 자료구조는 "놀이기구"를 떠올리시면 됩니다.
놀이기구는 한 줄로 섰다가, 한 줄로 나옵니다.
데이터를 한쪽 끝으로 넣고, 반대쪽으로 빠져 나옵니다.
그러면 가장 처음에 줄을 선 사람은? 가장 빨리 나옵니다!
가장 마지막에 선 사람은? 가장 늦게 나옵니다.
이런 자료 구조를 First In First Out이라고 해서 FIFO라고 부릅니다.
👀 그렇다면 이런 자료구조는 왜 필요할까요??
👉 순서대로 처리 되어야 하는 일이 필요하기 때문입니다.
주문이 들어왔을 때 먼저 들어온 순서대로 처리 해야 할 때 혹은 먼저 해야 하는 일들을 저장하고 싶을 때
큐를 사용합니다.
👀 큐의 구현은?
👉 큐라는 자료 구조에서 제공하는 기능은 다음과 같습니다.
1) enqueue(data) : 맨 뒤에 데이터 추가하기
def enqueue(self, value): # 현재 [4] -> [2] 인 상태에서
new_node = Node(value) # [3] 을 만들고
self.tail.next = new_node # 현재 tail 인 [2] 의 다음을 [3] 으로 지정합니다.
self.tail = new_node # 그리고 tail을 [3] 으로 지정합니다.
2) dequeue() : 맨 앞에 데이터 뽑기
def enqueue(self, value):
new_node = Node(value)
if self.is_empty(): # 만약 비어있다면,
self.head = new_node # head 에 new_node를
self.tail = new_node # tail 에 new_node를 넣어준다.
return
self.tail.next = new_node
self.tail = new_node
3) peek() : 맨 앞에 데이터 보기
def peek(self):
if self.is_empty():
return "Queue is empty!"
return self.head.data
4) isEmpty() : 큐가 비었는 지 안비었는 지 여부 반환 해주기
def is_empty(self):
return self.list.head is None
👀 큐는 뭘로 구현하면 좋을까요?
👉 데이터를 넣고 뽑는 걸 자주하는 자료구조입니다!
👉 스택과 마찬가지로 링크드 리스트와 유사하게 구현 할 수 있습니다.
'항해 중 > 알고 보면 알기 쉬운 알고리즘' 카테고리의 다른 글
트리 - 이진 트리, 완전 이진 트리 (0) | 2021.11.14 |
---|---|
해쉬 - 해쉬 테이블, 해쉬 함수, 체이닝, 개방 주소법 (0) | 2021.11.13 |
정렬 - 버블정렬, 선택정렬, 삽입정렬 (0) | 2021.11.13 |
재귀함수 - 팩토리얼, 회문 검사 (0) | 2021.11.13 |
이진 탐색, 순차 탐색 (0) | 2021.11.13 |
댓글