CS/자료구조(19)
-
[열혈자료구조] 4강. 연결 리스트(Linked List) 2 - (2)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 본 포스팅에서는 교재를 바탕으로 단순 연결 리스트의 ADT를 정의하고, 정렬 기능과 노드 삽입 기능을 구현해 보고자 한다. 정렬 기능의 추가 ADT는 구현 방식과 무관하며 기능만 포함되면 되기 때문에, 앞선 포스팅에서 다루었던 배열로 정의한 리스트(https://cascade.tistory.com/69)를 그대로 가져와 써도 된다. 대신, 정렬 기능만 추가해 보자. 1. 리스트의 생성 : 리스트의 주소 값을 인자로 전달하고 초기화한다. void ListInit(List *plist); 2. 데이터의 저장 : 리스트에 데이터를 저장한다. void LInsert(List * plist, LData data..
2024.04.01 -
[열혈자료구조] 4강. 연결 리스트(Linked List) 2 - (1)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 앞선 포스팅에서는 열혈자료구조 3장에서 다루었던 추상 자료형(ADT)과 배열로 정의한 리스트의 구현을 정리하였다. 4강부터는 배열이 아닌, "연결"을 기반으로 한 리스트의 새로운 정의에 대해 다룬다. 리스트를 배열로 정의하는 것의 단점은, 앞선 포스팅의 코드를 보면 알 수 있겠지만 최대 길이가 정해져 있다는 것이다. 즉 정적으로 100개의 메모리를 할당했으므로, 100개가 넘는 자료를 저장할 수 없다. 이에 따라 메모리를 동적으로 구성하여 리스트를 정의해야 한다. 이를 위해, 노드를 연결하여 리스트를 만드는 방식을 사용하자. 노드의 정의 노드(Node)는 데이터를 저장할 수 있으며 다른 노드와 연결이 ..
2024.03.30 -
[자작 예제] 유향선분 구조체를 저장하는 리스트
https://cascade.tistory.com/70 [열혈자료구조] 3강. 연결 리스트(Linked List) 1 - (2) * 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. https://cascade.tistory.com/69 [열혈자료구조] 3강. 연결 리스트(Linked List) 1 - (1) * 본 글은 [윤성우의 cascade.tistory.com 앞서 열혈자료구조 교재에서 배열로 정의한 리스트를 구현하고, Point 라는 구조체(2차원 좌표평면 상의 점)를 정의하여 리스트 안에 이 구조체를 저장할 수 있도록 하는 코드를 공부하였다. 본 포스팅에서는, 두 개의 Point (시작점, 끝점)을 변수로 가지는 유향선분(Directed Lin..
2024.03.30 -
[열혈자료구조] 3강. 연결 리스트(Linked List) 1 - (2)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. https://cascade.tistory.com/69 [열혈자료구조] 3강. 연결 리스트(Linked List) 1 - (1) * 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 추상 자료형(Abstract Data Type, ADT) 추상 자료형 = 각 기능의 구현 등 세부적인 내용은 나타내지 cascade.tistory.com 앞선 포스팅에서는 배열로 정수 리스트를 구현하였고, 리스트의 구현내용을 확인하지 않고 main함수에서 이를 사용하여 ADT의 개념을 학습하였다. 본 포스팅에서는 정수가 아닌 다른 자료형을 나열하는 리스트를 구현하고 사용해 ..
2024.03.30 -
[열혈자료구조] 3강. 연결 리스트(Linked List) 1 - (1)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 추상 자료형(Abstract Data Type, ADT) 추상 자료형 = 각 기능의 구현 등 세부적인 내용은 나타내지 않고, 기능 그 자체만 나열한 것 예를 들어, 지갑을 정의하는 추상 자료형에 대해 생각해 보자. 지갑에는 100원짜리 동전과 5000원짜리 지폐가 들어갈 수 있다. 각 화폐의 개수를 변수로 하는 구조체를 이용하여 지갑을 정의하자. typedef struct _wallet { int num_coin_100; int num_bill_5000; }Wallet; 또한, wallet이라는 자료형에 관련된 연산을 결정하는 것도 자료형을 정의하는 데 필요하다. int TakeOutMoney(Wall..
2024.03.29 -
[열혈자료구조] 2강. 재귀(Recursion)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 재귀는 자료구조와 알고리즘에서 매우 중요한 요소이다. 재귀함수의 기본적 이해 void Recursive(){ printf("Recursive Call\n"); Recursive(); } 재귀함수는 위와 같이 함수 안에서 함수를 다시 호출하는 형태이다. 그러나 Recursive의 정의 부분에서 Recursive를 호출하고 있는데, 정의가 끝나지 않은 함수를 다시 호출하는 것이 가능한가? 재귀함수가 작동할 때 아래와 같이 메모리상에서 함수의 복사본을 여러 개 만들고 다시 호출한다. 즉, 함수의 명령문을 실행할 때 CPU로 불러와서 사용하는데, 명령문을 실행하는 중간에 재귀 조건이 등장한다면 CPU로 하나 ..
2024.03.27