본문 바로가기

자료구조5

[C언어] Heap기반 연결리스트(Linked list) 연결리스트 목차 연결리스트 구조체 선언 연결리스트 CRUD 이중 연결 리스트 이중 연결 리스트 CRUD Heap으로 구현한 연결리스트 Heap으로 구현한 이중 연결 리스트 동적 할당 기반 연결리스트 동적할당을 하면 Heap 공간에 데이터가 저장된다. 이전에 다뤘던 배열기반 연결리스트는 데이터 공간을 미리 선언해두고 이용했기 때문에 데이터의 수를 삽입/삭제할 때 유동적으로 융통성있게 활용하는 것이 어려웠다. 그래서 이번에는 calloc을 이용해서 연결리스트를 구현해보고자한다. 동적할당이기 때문에 자료를 삭제할 때 free를 해주어서 메모리 공간을 다시 확보해줘야 하는 것을 기억해야한다. C언어  동적 할당 기반 연결리스트 구현 간단히 새 노드를 삽입하여 연결하는 부분만 살펴보면 다음과 같다. //새노드 .. 2022. 7. 12.
[C언어] 배열 기반 연결리스트(Linked List) 연결리스트 목차 연결리스트 구조체 선언 연결리스트 CRUD 이중 연결 리스트 이중 연결 리스트 CRUD Heap으로 구현한 연결리스트 Heap으로 구현한 이중 연결 리스트 연결리스트 배열의 경우 자료를 읽기는 쉽지만 삽입/삭제는 어렵다. 많은 자료의 이동을 동반하기 때문이다. 이에 반해 연결리스트는 자료를 중간에 삽입하고 삭제하는데 꽤 편리하다. 연결리스트는 next라는 자기참조객체를 통해서 구현된다. 개체 하나를 삽입하고 싶다면 삽입할 위치의 전의 next 연결을 끊고 삽입하려는 개체와 연결한다. 삽입한 개체는 다음의 개체에 next연결을 넣는다. 삭제의 경우는 이전과 다음의 개체를 연결하고 삭제하려는 개체의 연결을 끊으면 된다. C언어 배열 기반 연결리스트 구현 C언어를 이용해서 배열기반의 연결리스트.. 2022. 7. 11.
Stack/Queue - 스택과 큐, 스택의 종류 스택과 큐는 선형자료구조(Linear List)이다. 스택은 LIFO(Last In First Out)구조로 동작한다. 먼저 들어 온게 쌓이고 나중에 들어온게 위로가서 나중에 데이터를 뽑을 때, 나중에 들어온 데이터가 먼저 나가는 형식으로 접시나 책을 쌓는다고 생각하면 이해하기 쉽다. 예시로는 아래와 같다. C언어로 구현할 때, 스택의 종류에는 4가지가 있음을 고려해 볼 수 있다. 종류를 나누는 기준은 2 가지가 있다. 1. SP(stack pointer)의 위치 - Data의 앞에 위치하느냐 (FULL), 빈 공간에 위치하느냐(Empty) 2. SP의 조작 - SP를 감소시키느냐 (Descending), 증가시키느냐 (Ascending) 이에 따라 스택은 FD stack, ED stack, FA sta.. 2022. 7. 10.
Bubble Sort - 거품 정렬과 코드 지금까지 내가 알고있기로는 버블 소트는 앞으로 다룰 정렬중에서 가장 정직하고(?) 가장 비효율적인 정렬이다. 그래서 이 정렬이 실제로 쓰이는지 궁금하기도하다. 오름차순의 경우, 거품 정렬은 뒤에 있는 데이터와 값을 비교하면서 앞의 데이터가 뒤의 데이터보다 크면 위치를 교환한다. 처음에는 주어진 배열의 처음에서 끝(N)까지 탐색, 그 뒤로는 처음부터 N-1까지 탐색, 그 뒤로는 N-2까지 탐색하며 탐색 범위를 줄여나간다. 그래서 처음 탐색을 완료하면 N번째에는 제일 큰 수가 오고 다음으로 탐색을 완료하면 N-1번째에는 그 다음으로 큰 수가 온다. 예를 들어 1, 5, 3, 2, 4 라는 배열이 있을 때 이를 거품정렬을 한다면 다음과 같을 것이다. 이 과정을 의사코드로 나타내면 for(int i = 0; i.. 2022. 7. 5.
새내기 자료구조 멘토링 - Stack,Queue,Tree,Graph 오늘은 교내 학술동아리 신입회원분들을 대상으로한 멘토링에서 자료구조 멘토링을 진행했습니다. Stack, Queue, Tree, Graph를 위주로 퀴즈를 풀어가면서 자료구조를 빠르고 쉽게 찍어먹어 봤습니다. 제 소개를 드리고 배울 내용에 대해 소개드렸습니다. (멘토 소개 생략) 인터넷에 검색해보면 Primitive Data Structure는 char, integer, real, string, pointer.. 처럼 다양하게 적혀있습니다. 아마 프로그래밍 언어별로 다를 수도 있는 것 같습니다. 그래서 그냥 크게 신경쓰지 않고 Boolean, Char, Integer, Floating-Point로 나눴습니다. Non-Primitive Data Structure도 검색해보면 많이 다르게 나뉘는데 그냥 대충!.. 2021. 11. 14.