스택 후입선출
스택의 예시 및 정보!
편의점에서 음료를 채울때 앞부터 차곡차곡 채우고, 손님은 앞에서 꺼낸다.
뒤로가기 버튼을 누르면 전 페이지가 나온다.
Undo/Redo 같은 기능도, 역순의 성질을 이용할때!
LIFO(Last In First Out)의 성격을 가진 자료 구조!
넘치는 건 stackoverflow
반복문에서 종료조건 지정하지 않거나, 잘못된 종료조건을 지정하여 무한루프가 생기면 발생!!
스택영역이 쌓이고 쌓여 터진다
스택의 사용법
픽(peek): TOP 데이터를 보는것
푸시(push): 스택에 원소를 삽입하는 행위!!(원소는 top에 들어간다!)
팝(pop): 스택의 top에서 원소 가져오기
def peek(self):
if self.head is None:
return "Stack is empty!"
# 위의 리턴 코드는 좋지 않아요.
# 예외를 던지는 것도 아닌데다가 본인이 메시지를 결정해요!
# 스택이 비어있을 때 나오는 메시지를 결정하는 것은 이 함수 호출부가 해야해요!
# 따라서, 이 때는 return None으로 None을 던지고 호출부를 아래처럼 작성해요!
### peek() 호출부 시작
# top = stack.peek()
# if top is None:
# print("Stack is empty!")
# ...
### peek() 호출부 끝
return self.head.data
def push(self, value): # 현재 [4] 밖에 없다면
new_head = Node(value) # [3] 을 만들고!
new_head.next = self.head # [3] -> [4] 로 만든다음에
self.head = new_head # 현재 head의 값을 [3] 으로 바꿔준다.
def pop(self):
if self.head is None: # 만약 비어있다면
return "Stack is empty!" # 여기서도 메시지를 리턴하지말고 None 리턴!
delete_head = self.head # 제거할 node 를 변수에 잡습니다.
self.head = self.head.next # 그리고 head 를 현재 head 의 다음 걸로 잡으면 됩니다.
return delete_head # 그리고 제거할 node 반환
큐 선입선출
서버 접속 대기열 / 롤 대기열 큐 / 인쇄 대기열 큐
FIFO(First In First Out)의 성격을 가진 자료 구조!
큐의 사용법
픽(peek): 큐의 맨 앞 데이터를 보는 것
삽입(enqueue): 큐에 원소를 삽입함(맨 뒤로 들어감)
dequeue(뽑기): 큐에서 원소를 뽑아오는 행위
def enqueue(self, value):
new_node = Node(value)
if self.head is None: # 만약 비어있다면,
self.head = new_node # head(Front)에 new_node를
self.tail = new_node # tail(Rear)에 new_node를 넣어줍니다!
return
# 비어있지 않다면 기존 tail에 새 노드를 포인터로 연결하고요!
self.tail.next = new_node
# 새 노드를 tail로 설정해요!
self.tail = new_node
def dequeue(self):
if self.head is None
return "Queue is empty!" # 이런식의 코드는 좋지 않다고 말씀드렸었어요!
# 제거할 node를 변수에 잡습니다.
delete_head = self.head
# 그리고 head(Front)를 현재 head의 다음 걸로 잡으면 됩니다.
self.head = self.head.next
# 그리고 제거할 node 반환을 해요!
return delete_head.data
정렬 (이진탐색 가능)
버블정렬
선택정렬
삽입정렬
.
.
.
원격강의 들으면서 배운 내용 정리
이진탐색: 중간을 기준으로 탐색
재귀: 어떠한 것들을 정의할 때 자기 자신을 참조(무한정 돌게X, 탈출조건 필수)
팩토리얼 (표기법! | ex - 3! = 3 × 2 × 1)
1부터 어떤 양의 정수 N까지의 모든 정수를 곱한 것
탈출조건 필요!!
if n == 1: #탈출조건!!
return 1
Factorial(n) = n * Factorial(n - 1) #여기만 써주면 됩니다!
Factorial(n - 1) = (n - 1) * Factorial(n - 2)
....
Factorial(1) = 1
회문
똑바로 읽으나 거꾸로 읽으나 똑같은 단어나 문장
ex) 토마토, 오디오, 아시아, 일요일, 소주만병만주소,
가련하시다 사장 집 아들 딸들아 집 장사 다시하련가
is_palindrome("ex") -> boolean 형태로 (True, False)
코드 넣을때 첫 줄 백틱3개 뒤에 python 적으면 더 이뻐집니다 ... ☆