2021년 11월
#
2021-11-16#
자료구조(Data Structure)사전적인 의미는 자료(Data)의 집합의 의미하며, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것
자료구조를 사용하면 데이터를 더 효율적으로 저장하고, 관리할 수 있으며 잘 선택된 자료구조는 실행 시간을 단축시켜주거나 메모리 용량의 절약을 이끌어 낼 수 있다.
#
자료구조의 선택 기준- 자료의 처리 시간
- 자료의 크기
- 자료의 활용 빈도
- 자료의 갱신 정도
- 프로그램의 용이성
#
자료구조의 종류자료구조는 크게 선형 구조와 비선형 구조로 나누어진다.
#
선형 구조- 배열(Array)
- 연결 리스트(Linked List)
- 단순 연결 리스트
- 이중 연결 리스트
- 원형 연결 리스트
- 덱(Deque)
- 스택(Stack)
- 큐(Queue)
#
비선형 구조- 트리(Tree)
- 일반 트리
- 이진 트리
- 그래프(Graph)
- 방향 그래프
- 아무 방향 그래프
출처: 코인하는 프로그래머
#
배열(Array)순차적(ordered)으로 데이터를 저장하는 자료구조
#
설명배열은 연관된 데이터들을 하나의 그룹으로 묶어서 효율적으로 데이터들을 관리하기 위해서 사용된다.
배열에 저장되는 데이터는 순차적으로 저장되고 고유한 index 값을 가지고 있다.
하나의 배열을 구성하는 단위 데이터들을 'element', '원소'라고 부른다.
배열에 특정 원소에 접근하기 위해서는 arrayValue[index] 의 형식으로 한다.
배열의 원소를 식별하기 위해서 사용하는 index는 숫자가 아니라 문자를 사용할수도 있다. Associative Array연관배열이라고 부른다.
#
장점- 바로 만들어서 활용하기가 쉽다.
- 더 복잡한 자료 구조의 기초가 될 수 있다
- 원하는 데이터를 효율적으로 탐색/가져올 수 있다
- 정렬에 용이하다
#
단점- 데이터를 저장 할 수 있는 메모리 크기가 고정되어 있다
- 데이터 추가 / 삭제 방법이 비효율적이다
- 구조 재구성 시 정렬하는 방식이 비효율적이다
#
예제 (Example)출처: 생활코딩
#
2021-11-30#
연결 리스트(Linked List)각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 즉, Array List와는 다르게 엘리먼트와 엘리먼트 간의 연결(link)을 이용해서 리스트를 구현한 것을 의미한다.
- 노드: 리스트에서 연결되는 하나의 데이터 정보를 말하는데 어떠한 데이터를 담을 공간과 자신의 다음 위치를 가리킬 포인터를 노드라고 한다.
#
단일 연결 리스트단일 연결 리스트는 각 노드에 자료 공간과 한 개의 포인터 공간이 있고, 각 노드의 포인터는 다음 노드를 가리킨다.
- 데이터 삽입
리스트에 첫 번째로 담길 노드는 값을 삽입하고 다음 주소를 가리키는 포인터는 nullptr을 담아준다. 이 노드는 head와 tail을 가리키게 된다.
- 두 번째 이후 삽입
두 번째 이후 삽입부터는 노드를 생성하고 값을 삽입한 뒤 이전 노드에 해당 노드의 주소를 가리키도록 연결을 시켜준다. 그 후 tail을 가장 마지막에 연결한 노드로 이동시켜 준다.
- 데이터 검색 및 출력
리스트는 연결된 형태이기 때문에 앞에서부터 순차적으로 탐색을 한다. head의 위치를 변경되지 않도록 current가 노드에서부터 하나씩 다음 노드를 가리키는 포인터를 이용하여 다음 연결된 노드로 이동하여 데이터를 검색한다.
- 데이터 삭제
데이터 삭제는 데이터 검색과 동일하게 노드를 순회하면서 다음 위치를 삭제하기 전 다다음 노드의 주소를 먼저 연결시켜준 후 삭제를 한다.
#
예제 코드#
이중 연결 리스트(doubly linked list)이중 연결 리스트의 구조는 단일 연결 리스트와 비슷하지만, 포인터 공간이 두 개가 있고 각각의 포인터는 앞의 노드와 뒤의 노드를 가리킨다. 그래서 탐색을 할때 해당 노드에서 앞에 노드나 뒤에 노드로 쉽게 왔다갔다 할 수 있는 장점이 있다.
- 노드 삽입
- 노드 삭제
#
예제 코드#
원형 연결 리스트(Circular Linked List)원형 연결리스트란 리스트의 마지막 노드의 링크가 첫 번째 노드를 가리키는 연결 리스트이다. 새 노드를 각각 머리와 꼬리에 추가하는 방식이 있다.
- 머리에 노드를 추가 시키는 방식
- 꼬리에 노드를 추가 시키는 방식
출처 : https://developer-jun.tistory.com/7, https://hijuworld.tistory.com/55, https://dudri63.github.io/2019/02/28/ds5/, https://jwlee010523.tistory.com/entry/원형-연결-리스트Circular-Linked-List