목록CS (18)
넘치게 채우기
트리는 계층적 관계를 표현하는 자료 구조이다. 뿌리에서 가지를 늘려가며 뻗어가는 모양을 그리는 완전 그래프여서 트리라고 부른다. 회사의 조직도나, 컴퓨터 폴더의 구조에서 트리를 볼 수 있다. 용어 정리 ·노드 node 트리의 구성요소가 되는 정점(A, B, C, D, E, F) ·간선 edge 노드와 노드를 연결하는 연결선 ·루트 root 트리의 최상위 노드(A). 나무의 뿌리와 같은 위치에 있어서 이름이 루트이다. ·단말 노드 terminal node 아래로 또 다른 노드가 연결되어있지 않은 노드이다. 나무의 구조상 잎의 위치여서 잎사귀 노드(leaf node)라고도 한다. ·내부 노드 internal node 단말 노드를 제외한 모든 노드, 비단말 노드(nonterminal node)라고 한다. ·부..
해시 테이블(Hash Table)은 해시 함수를 통해서 얻은 인덱스에 key 와 value값을 저장하는 자료 구조이다. 해시 함수는 같은 key값을 받으면 같은 인덱스값으로 반환시킨다. 해시 함수 해싱을 하는 해시 함수에는 다음과 같은 것들이 있다: 1. Division Method: 가장 쉽고 간단한 방법이다. key값을 해시 테이블의 크기로 나눈 나머지를 인덱스로 정하는 것이다. h(k) = k mod m (k = key, m = size of hash table) m값은 소수이고, 2의 제곱수와 먼 값을 사용해야 효율적이라고 한다. 2. Multiplication Method: key값과 A(0 < A < 1)의 곱의 소수 부분에 테이블의 크기 m을 곱한 값의 정수값을 인덱스로 한다. h(k) = ..
큐(Queue) 큐 자료구조는 우리가 평소에 줄을 서듯, 먼저 들어온 사람이 먼저 나가는, 선입선출(先入先出, First in First out)의 형식을 따른다. 큐의 연산 큐의 연산은 다음 5가지가 있다: isEmpty(): 큐가 비어있는지를 판단한다. True 또는 False값으로 반환된다. enqueue(data): 큐에 값을 입력시킨다. dequeue(): 큐의 제일 먼저온 값을 내보낸다. rear(): 큐의 맨 뒤에 있는 값을 반환한다. front(): 큐의 제일 반저온 값을 반환한다(큐에서 pop하지는 않는다) 큐의 구현 - 배열을 이용한 구현(Python) class queue(): #큐 선언 def __init__(self): self.arr = [] def isEmpty(self): #..
스택(Stack) 스택 자료구조는 탄창에 총알을 넣고 빼듯, 먼저 넣은 데이터를 늦게 꺼내는 선입후출(先入後出, FILO(First in Last out)), 후입선출(後入先出, LIFO(Last in First Out))을 따른다. 스택의 연산 스택의 연산은 다음 4가지가 있다: isEmpty() : 스택이 비어있는지를 판단한다. push(data) : 스택의 맨 위에 데이터를 쌓는다 pop() : 스택의 맨 위 데이터를 스택에서 뺀다. top() : 스택의 맨 위의 값을 확인한다. 스택의 구현 - 배열을 이용한 구현(Python) class stack(): #스택 선언 def __init__(self): self.arr = [] def _len_(self): return len(self.arr) de..
연결 리스트(Python) - 전체 class Node(): #노드 선언 def __init__(self, data, next = None): self.data = data self.next = next class SimplyLinkedList(): def __init__(self): self.head = None def link(self, node, next): #노드 연결 node.next = next def getTail(self): #꼬리 노드 불러오기 currentNode = self.head while currentNode.next: currentNode = currentNode.next return currentNode def getIndex(self, data): #data의 인덱스 반환 ..
이중 연결 리스트 이중 연결 리스트는 기존의 연결리스트와는 달리, 쌍방향으로 연결이 되어있다. 이미 한 노드를 지나쳐도, 돌아갈 수 있다. 장점 찾아야 하는 값이 tail쪽에 가까울 때, head부터 시작해서 탐색하는 번거로움 등을 없앨 수 있다. 위치를 모르는 상태에서 값을 찾을 때에도, 앞에서 절반, 뒤 끝에서 절반씩 탐색하면 훨씬 효율적이다. 단점 변수를 3개 사용한다.(이전 메모리주소, 내 엘리먼트, 다음 메모리주소) 이 과정에서 메모리를 더 사용하게된다. 구현이 복잡해진다. 그러나, 이런 단점들을 두고도, 얻게 되는 것이 많아서, 실제 연결리스트를 사용할 때, 이중 연결리스트를 많이 사용한다. 노드의 추가 노드 a↔b↔d에서 b↔d 사이에 c를 연결하고 싶으면, c의 다음 노드로 d를 연결해주고..
연결 리스트는 순차 리스트와는 다르게, 리스트의 노드(요소)값의 메모리주소가 순차적이지 않다. 대신, 노드에 자신의 값과, 다음 노드의 메모리주소를 저장한다. 시작하는 노드를 머리(head)라고 하고, 맨 끝을 꼬리(tail)이라고 한다. 노드에서 다음 노드로 향하는 주소값을 포인터((Pointer)라고 한다. tail노드에서 가지고 있는 포인터값은 none 또는 null이라 한다. 접근 [2]에 있는 값을 보려면, 머리부터 다음 노드를 하나하나 찾아가야한다.(순차적으로 탐색해야한다) 시간복잡도는 O(N)이다. 삽입 A - B - C로 연결되어있는 연결 리스트 중 B-C 사이에 D 노드를 삽입하고 싶으면, B의 포인터를 D의 메모리주소, D의 포인터를 C의 메모리주소로 바꿔주면된다. 이때, 바꾸는 것의 ..
배열 배열은 같은 자료형의 변수들을 각각 순차적으로 이은 자료구조이다. 배열이 가지고있는 자료의 순서와 메모리상에 저장된 자료의 순서가 일치한다. 배열을 각각 구성하는 값을 요소(element)라고 하고, 배열 내에서 요소의 위치값을 인덱스(index)라 한다. 배열 A에서의 인덱스 i값은 A[i]로 표기한다. 일반적으로 배열이라 하면, 크기가 정해진 정적 배열(Static Array)라고 한다. 순차 리스트 순차 리스트는 배열과 같은 개념이나, 하나 다른 점이 있다. 크기가 정해지지 않은 동적 배열(Dynamic Array)라는 것이다. 기존 배열보다 더 많은 요소들을 받아야 할 때, 크기가 더 큰 새로운 배열을 만들어 기존 배열을 복사하고, 새로 받는 값들을 추가시킨다. C언어의 벡터, 파이썬의 리스..