。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

CS

4. 자료구조

quarrrter 2023. 12. 18. 01:18

4.1 복잡도 

알고리즘을 수행하면 시간과 메모리 공간 드으이 자원이 사용되며

시간 복잡도는 알고리즘의 실행 시간을 정량화하는 것

공간 복잡도: 실행하는 데 필요한 메모리 사용량을 정량화 

복잡도 표기법: 빅오 표기법 

입력 값(n)에 대한 수식에서 최고차항을 기준으로 알고리즘이 수행되는 최악의 시간 복잡도를 표현

최고차항을 기준으로 표현하는 이유는 연산의 수가 극한에 수렴할 때 나머지 항이 복잡도에 미치는 영향은 미미하기 때문이다. 

 

4.2 선형 자료구조

연속적으로 데이터가 나열되는 자료구조를 나타낸다. 

배열, 리스트, 스택, 큐

 

4.2.1 배열

정해진 크기만큼 데이터가 일렬로 저장되는 정적 자료구조 

각 데이터를 배열의 요소라고 하며 데이터를 가리키는 번호를 인덱스라고 한다. 

 

접근: 걸리는 시간 복잡도 O(1)

검색: 걸리는 시간 복잡도 O(n)

삽입: 걸리는 시간 복잡도 O(n)

삭제: 걸리는 시간 복잡도 O(n)

*n" 데이터의 개수 또는 크기

 

4.2.2 연결 리스트

크기가 정해져있지 않은 동적 자료구조 

여러개의 노드로 구성되어 있음 - (노드: 데이터와 다음 노드가 저장된 주소 값을 가지고 있음)

헤드 포인터와 테일 포인터로 시작과 끝을 알 수 있음

 

걸리는 시간 복잡도

검색:  O(n) - 첫 번째 노드부터 하나씩 값을 확인하는 선형 탐색 

추가: 데이터를 추가하는 연산 자체 O(1)(이전 노드가 가리키는 주소 값을 변경하는 작업), / 데이터를 추가하려는 위치로 이동하기까지: O(n)

삭제: 데이터를 삭제하는 연산 자체 O(1) , 데이터를 추가하려는 위치로 이동하기까지: O(n)

 

4.2.3 스택

데이터를 쌓는 형태로 LIFO(Last In First Out) 후입선출

어떤 작업의 실행을 취소할 때, 웹 브라우저에서 뒤로가기 할 때 . 들최근에 처리한 작업들을 하나씩 꺼낼 때 사용

 

연산 설명 시간 복잡도
push 스택에 새로운 데이터 삽입 O(1)
pop 스택에서 가장 위에 있는 데이터 삭제 O(1)
peek 스택에서 가장 위에 있는 데이터 확인  O(1)
isEmpty 스택이 비어 있는지 확인  O(1)
isFull 스택이 가득 찼는지 확인  O(1)

 

 

4.2.4 큐

데이터가 순차적으로 들어오는 형태로, FIFO(First in, First Out) 선입선출

큐의 맨 앞: front, 맨 뒤: rear

운영채제에서 프로세스가 CPU를 할당받기 전가지 대기하는 준비 큐 

어떠한 작업을 처리할 때 작업 요청이 들어온 순서대로 처리하기 위해 사용 

 

연산 설명 시간 복잡도
enqueue 큐의 rear에 새로운 데이터 삽입 O(1)
dequeue 큐의 front에서 데이터 삭제 O(1)
peek  큐의 front에 있는 데이터 확인  O(1)
isEmpty 큐가 비어있는지 확인  O(1)
isFull 큐가 가득 찼는지 확인 O(1)

 

큐를 배열로 구현하면 rear 의 인덱스를 이용해 큐가 가득 찼는지 쉽게 확인할 수 있고, 인큐/디큐를 수행할 때 front나 rear 만 수정하면 된다. 하지만 데이터가 1개인 경우 rear의 인덱스를 보고 큐에 데이터가 가득 찼다고 생각할 수 있다. 

새로운 해결 방식으로 순환 큐(원형 큐)

삽입 연산을 할 때 배열의 앞부분에 데이터를 삽입하고, 배열의 시작과 끝이 구분되지 않아 삽입과 삭제를 유연하게 수행할 수 있다. 

 

**덱

양쪽 끝에서 데이터의 삽입과 삭제가 모두 가능한 자료구조로 큐와 스택을 합친 형태

'CS' 카테고리의 다른 글

4. 자료 구조 요약 정리  (0) 2023.12.18
4.3 비선형 자료구조  (3) 2023.12.18
3.4 조인  (0) 2023.12.16
3.2 관계형 데이터 베이스에서 사용하는 개념  (0) 2023.12.15
앱서버 웹서버  (2) 2023.12.12