본문 바로가기

자료구조4

링크드 리스트 성능 개선 2023.04.20 - [자료구조/LINKED LIST 링크드 리스트] - 1. 링크드 리스트(Linked List) - 더블 링크드 리스트(메모리 풀 방식) 1. 링크드 리스트(Linked List) - 더블 링크드 리스트(메모리 풀 방식) 이번 글에서는 링크드 리스트 중 더블 링크드 리스트에 대해서 알아보고, 실제로 C언어 코드로 구현까지 해보도록 하겠습니다. 일반적으로 동적할당을 이용한 구현 코드가 널리 알려져 있지만, best-coding.tistory.com 이전 글에서는 링크드 리스트가 무엇인지 알아보고 실제로 더블 링크드 리스트를 메모리 풀 방식으로 구현해봤습니다. 이번 글에서는 링크드 리스트의 성능을 개선할 수 있는 방법을 알아보도록 하겠습니다. (1) 특정 노드에 빠르게 접근하기 링크드 .. 2023. 4. 21.
1. 링크드 리스트(Linked List) - 더블 링크드 리스트(메모리 풀 방식) 이번 글에서는 링크드 리스트 중 더블 링크드 리스트에 대해서 알아보고, 실제로 C언어 코드로 구현까지 해보도록 하겠습니다. 일반적으로 동적할당을 이용한 구현 코드가 널리 알려져 있지만, 저는 메모리 풀 방식을 활용한 코드를 작성하도록 하겠습니다(왜냐하면 알고리즘 문제 풀이시에는 메모리 풀 방식이 훨씬 시간이 적게 걸리기 때문입니다.) 자세한 내용은 밑에서 설명드리도록 하겠습니다. 링크드 리스트의 경우 직접 구현시에 포인터와 구조체를 사용합니다. "포인터, 구조체, 구조체 포인터"가 무엇인지 잘 모르시는 분들을 해당 내용을 먼저 공부하시고 다시 이 글을 보시면 훨씬 좋을 것 같습니다! (1) 링크드 리스트란? 링크드 리스트는 위 그림처럼 여러 노드들을 연결한 자료구조입니다. 저장하는 데이터 하나의 단위를 .. 2023. 4. 20.
2. 업그레이드 된 HEAP 힙 (특정원소 삭제, 업데이트 O(logN)만에 가능) 2023.03.12 - [자료구조/HEAP 힙] - 1.HEAP 힙 기본 구현 (C언어 구현, index 1부터 시작) 1.HEAP 힙 기본 구현 (C언어 구현, index 1부터 시작) 1. HEAP 힙 요약 힙은 우선순위가 가장 높은 원소가 루트(첫번째 인덱스)에 존재하는 것이 보장된 자료구조입니다. 또한, 부모노드는 자식노드보다 우선순위가 높습니다.(우선순위가 같은 경우가 best-coding.tistory.com 지난 시간에 구현한 힙 코드를 조금 더 업그레이드 시켜서 특정 원소 삭제 및 업데이트가 O(logN)만에 가능한 코드를 만들어 보겠습니다. 1. 기본 아이디어 지난번에는 특정 id에 해당하는 원소를 찾기위해 힙의 첫번째 원소부터 순차적으로 반복문을 돌리면서 해당하는 인덱스를 얻었습니다. .. 2023. 3. 12.
1.HEAP 힙 기본 구현 (C언어 구현, index 1부터 시작) 1. HEAP 힙 요약 힙은 우선순위가 가장 높은 원소가 루트(첫번째 인덱스)에 존재하는 것이 보장된 자료구조입니다. 또한, 부모노드는 자식노드보다 우선순위가 높습니다.(우선순위가 같은 경우가 있을 수는 있음) 힙은 트리로 표현 가능한데, 완전이진트리의 한 종류입니다(자식 최대 2개, 자식은 왼쪽부터 생김) 그리고 힙은 STL의 우선순위 큐랑 같은 것이라고 보시면 됩니다. STL의 우선순위 큐를 사용해도 되지만, 힙의 경우 구현이 간단하므로 직접 구현해서 사용하는 것 좋습니다. 왜냐하면 STL을 사용하는 것 보다는 직접 만들어 사용하면 실행시간을 꽤 많이 줄일 수 있기 때문입니다. 주의) Heap은 전체 원소가 우선순위대로 정렬된 자료구조가 아닙니다. 특정원소의 왼쪽 자식이 오른쪽 자식보다 클 수도 있고.. 2023. 3. 12.