일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- singly linked list
- 향상된 for문
- 자료구조
- 이진 큐
- Double Hasing
- 해시 테이블
- 부모 노드
- 배열
- Gargbae Collector
- 직접 주소 개방
- java
- array
- Quadratic Probing
- 노드 레벨
- 자바
- 트리 높이
- 객체 배열
- ListIterator
- Linear Probing
- 선형 조사법
- 조상 노드
- 루트노드
- Double형 배열
- 이차 조사법
- Open-Addressing
- binary queue
- 큐
- 단말노드
- Queue
- 자식 노드
- Today
- Total
목록분류 전체보기 (33)
영운's 블로그
트리는 스택, 큐, 배열, 리스트와는 다르게 계층적 구조를 가져 굉장히 중요한 자료구조이다. 트리를 공부하며 느낀 것은 트리라는 개념도 어렵지만 트리를 설명하는데 나오는 여러 새로운 용어들이 발목을 많이 잡는 것 같다. 여기서는 트리 관련하여 나오는 주요 용어를 정리하고자 한다. 노드(Node) , 키(Key) 트리를 구성하는 하나의 요소를 노드라고 부르며 하나의 노드가 저장하는 값을 키라고 한다. 하나의 노드는 키와 자손을 가리키는 참조 변수(left, right)를 갖는다. 루트 노드(Root Node), 서브 트리(Subtree) 가장 낮은 높이에 존재하는 노드를 루트 노드(Root Node)라고 부른다. 트리의 접근은 언제라 루트 노드를 시작으로 접근할 수 있다. 해당 노드의 왼쪽 혹은 오른쪽에 ..
이진 탐색 트리(Binary Search Tree) 필요성 탐색은 프로그램에서 가장 시간이 많이 걸리는 연산 중 하나이기에 효율적인 탐색을 구현하는 것은 굉장히 중요하다. 앞서 살펴본 스택, 큐, 배열, 리스트 구조는 모두 선형적인 구조를 갖고 있다. 선형적인 구조는 탐색 연산시 일일이 순차적으로 접근하여 데이터를 찾는 방식으로 탐색을 진행해야 하기에 탐색에 비효율적이다. 다음과 같이 배열과 연결리스트 모두 앞에서부터 순차적으로 탐색해야 값을 찾을 수 있고 최악의 경우 해당 값이 맨 마지막에 있다면 O(n)의 시간복잡도를 갖는다. 이러한 선형적인 구조의 탐색 비효율성은 데이터의 크기가 증가할수록 선형적으로 증가한다. 이러한 선형구조가 갖는 탐색의 비효율성을 개선한 것이 바로 이진 탐색 트리(Binary ..
Queue(큐)는 Stack(스택)과 반대로 선입선출(First In First Out, FIFO)의 특징을 가지고 있다. 먼저 들어온 것이 먼저 나간다는 FIFO는 일상생활에서의 줄서기, 마트 재고관리부터 운영체제의 프로세스 관리, 너비 우선 탐색(BFS) 알고리즘까지 다양한 곳에서 이용되고 있다. 이번 글에서는 큐에 대해 간단히 알아보고 이를 직접 자바로 구현해 본다. Queue는 Stack과 마찬가지로 배열과 리스트 두 가지 방법으로 구현할 수 있다. 배열로 구현한 Queue 전체 구조 배열을 이용하여 큐를 만드는 경우 다음과 같은 원형 큐 형태로 구현해야 한다. 원형 큐 형태를 구현함으로서 배열의 첫 데이터의 index가 0이 아닐 수도 있게 된다. 이를 통해 배열의 마지막 index에 데이터가 ..
스택(Stack)이란? 가장 늦게 들어간 요소가 가장 먼저 나오고 가장 먼저 들어간 요소가 가장 늦게 나오는 후입선출(LIFO: Last in First Out) 입출력 형태를 갖는 자료구조. 주요 연산으로 pop(), push()이 있다. pop은 가장 늦게 들어온 요소를 삭제하는 연산이고, push는 요소를 맨 앞에 삽입하는 연산이다. 구현 방법은 두 가지가 있다. 1. 배열을 이용한 구현 2. 리스트를 이용한 구현 두 가지 구현의 장단점은 결국 배열과 리스트의 장단점과 동일하다. 배열을 이용한 구현 장점: 구현이 간단하며 별도로 메모리를 동적으로 할당하지 않기에 속도가 빠르다. 단점: 크기가 고정 리스트를 이용한 구현 장점: 크기가 가변적 단점: 삽입, 삭제시 메모리를 동적으로 할당/해제하기에 속도..