데브코스 TIL/자료구조, 알고리즘 26

15강: 환형 큐(Circular Queue)

강의 큐의 활용 자료를 생성하는 작업과 이용하는 작업이 비동기적으로(asychronously) 일어나는 경우 자료를 생성하는 작업과 이용하는 작업이 양쪽 여러 곳에서 일어나는 경우 자료를 처리하여 새로운 자료를 생성하고, 그 자료를 또 처리해야 하는 경우 "환형 큐"는 정해진 개수의 저장 공간을 빙 돌려가며 이용하는 자료구조 입니다. 나오는 부분을 front, 넣는 부분을 rear로 지정합니다. 큐가 가득 차면 더 이상 원소를 넣을 수 없기 때문에 길이를 기억해 두어야 합니다. 자료구조 구현 배열 : python의 리스트 매소드 이용 연결 리스트 : 양방향 연결 리스트 이용 연산 size() : 원소의 수 isEmpty() : 비어있는지 판단 isFull() : 꽉 차 있는지 판단 enqueue() : ..

14강: 큐(Queues)

강의 "큐"는 한 쪽 끝에서 밀어 넣고(인큐, enqueue) 반대쪽에서 꺼내는(디큐, dequeue) 선형 구조 입니다. 선입선출(FIFO) 형태로 대기줄과 같습니다. 자료구조 구현 배열 : python의 리스트 매소드 이용 연결 리스트 : 양방향 연결 리스트 이용 연산 size() : 원소의 수 isEmpty() : 비어있는지 판단 enqueue() : 원소 추가 dequeue() : 반환 및 제거 peek() : 반환 14강 실습: 양방향 연결 리스트로 구현하는 큐 ⭐ 값이 중요하기 때문에 self.data를 적절히 사용하는 것이 중요한 문제! class Node: def __init__(self, item): self.data = item self.prev = None self.next = Non..

13강: 후위 표기 수식 계산

강의 알고리즘 설계 1. 왼쪽부터 한 글자씩 읽기 2. 피연산자이면 push, 연산자면 pop 13강 실습: 후위표현 수식 계산 ⭐ 계산한 값을 다시 push해서 마지막까지 valStack에 값이 남도록 하는 문제! class ArrayStack: def __init__(self): self.data = [] def size(self): return len(self.data) def isEmpty(self): return self.size() == 0 def push(self, item): self.data.append(item) def pop(self): return self.data.pop() def peek(self): return self.data[-1] def splitTokens(exprStr..

12강: 수식의 후위 표기

강의 중위 표기법 (infix notation) : 연산자가 피연산자들의 사이에 위치 후위 표기법 (postfix notation) : 연산자가 피연산자들의 뒤에 위치 알고리즘 설계 1. 연산자의 우선순위 설정 2. 왼쪽부터 한 글자씩 읽기 3. 열린 괄호는 push, 닫힌 괄호는 열린 괄호가 나올 때까지 pop 4. 수식을 끝까지 확인한 후 스택에 남은 연산자 모두 pop 12강 실습: 중위표현 수식 --> 후위표현 수식 ⭐ 힌트 : 스택에서 꺼내지 않고 peek()를 이용해 우선순위 비교하고 isEmpty() 이용하여 모두 pop! class ArrayStack: def __init__(self): self.data = [] def size(self): return len(self.data) def ..

11강: 스택(Stacks)

강의 "스택"은 자료를 보관할 수 있는 선형 구조입니다. 후입선출 (LIFO) 구조입니다. 발생 가능한 오류 스택 언더플로우 : 비어있는 스택에서 원소를 꺼내려는 경우 스택 오버플로우 : 꽉 찬 스택에 원소를 넣으려는 경우 구현 방법 배열 : python의 리스트 매소드 이용 class ArrayStack: def __init__(self): self.data = [] def size(self): return len(self.data) def isEmpty(self): return self.size() == 0 def push(self, item): self.data.append(item) def pop(self): return self.data.pop() def peek(self): return sel..

10강: 양방향 연결 리스트(Doubly Linked Lists)

강의 "양방향 연결 리스트"는 앞뒤 모두 진행 가능한 연결 리스트입니다. 기존의 연결 리스트와 다르게 Node의 구조 확장이 필요합니다. dummy node를 양방향으로 두어 모든 연결 리스트의 형태를 통일화할 수 있습니다. class DoublyLinkedList: def __init__(self): self.nodeCount = 0 self.head = Node(None) self.tail = Node(None) self.head.prev = None self.head.next = self.tail self.tail.prev = self.head self.tail.next = None 10강 실습: (1) 양방향 연결 리스트 역방향 순회 ⭐ 시작 노드를 tail로 설정하여 순회하는 문제! def re..