c언어(7)
-
[열혈자료구조] 8강. 트리(tree)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 열혈 자료구조 교재에서는 이제까지 리스트, 스택, 큐의 자료구조를 다루었다. 이들은 모두 선형적인 자료구조인 반면, 본 포스팅에서 정리할 트리는 비선형 자료구조이다. 트리는 컴퓨터 디렉토리, 가계도, 조직도, 의사결정 트리 등의 계층적 정보를 표현할 수 있는 자료구조이다. 트리 용어 노드(Node): 트리의 구성 요소, 위 그림에서는 2, 7, 5 등의 숫자에 해당 간선(Edge): 노드와 노드를 연결하는 선 루트 노드(Root node): 최상위의 노드, 위 그림에서는 2 단말 노드(Terminal node): 아래에 다른 노드가 연결되지 않은 노드, 위 그림에서는 2, 5, 11, 4 / Leaf ..
2024.04.08 -
[열혈자료구조] 7강. 큐(queue)
* 본 글은 [윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서] 를 바탕으로 작성하였습니다. 큐(queue)는 말 그대로 대기열이다. 놀이기구 줄을 설 때, 나중에 온 사람이 먼저 탑승하면 그건 새치기가 된다. 따라서, 대기열은 먼저 온 사람이 먼저 탑승하고, 나중에 온 사람은 나중에 탑승하는 선입선출(FIFO, First in First Out) 구조이다. LIFO 구조였던 스택과는 대비된다. 큐의 ADT 스택에는 push, pop, peek의 기능이 핵심적이었다. 큐는 데이터를 넣는 부분과 빼는 부분의 위치가 다르기 때문에, 아래와 같은 두 개의 연산이 핵심적이다. enqueue: 큐에 데이터를 넣음 dequeue: 큐에서 데이터를 뺌 이를 이용하여, ADT에 아래 5가지를 구현하자. 1...
2024.04.07 -
[열혈자료구조] 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 -
[C언어] 포인터의 연산과 인수 전달 방법
포인터의 연산포인터끼리의 연산https://cascade.tistory.com/67 C언어에서 포인터(pointer)의 개념C언어에서 포인터란, 메모리의 주소 값을 저장하는 변수이다. 포인터는 아래와 같이 선언한다. int n = 150; int *p = &n; 정수 값 150은 n이라는 변수 안에 저장되며, 이는 메모리 상에 어떤 공간에 할당cascade.tistory.com앞선 포스팅에서 정의한 포인터를 살펴 보자.int n = 150; int *p = &n; 여기서의 포인터 변수 p는 어떻게 연산할까? 포인터도 정수로 표현이 가능하므로 int 자료형처럼 더하기, 빼기, 곱하기, 나누기 연산이 가능할까? 두 정수 m, n을 선언하고 아래 코드를 실행해 보자.#include int main() { in..
2024.03.29 -
C언어에서 포인터(pointer)의 개념
C언어에서 포인터란, 메모리의 주소 값을 저장하는 변수이다. 포인터는 아래와 같이 선언한다. int n = 150; int *p = &n; 정수 값 150은 n이라는 변수 안에 저장되며, 이는 메모리 상에 어떤 공간에 할당된다. 150의 값을 가지는 n이 어떻게 메모리에 할당되는지 알아보자. 컴퓨터의 메모리 구조 컴퓨터에서 int 자료형이 저장될 때는 메모리 상에서 아래와 같이 저장된다. 메모리 주소 당 8자리 이진수가 들어가고, 이를 바이트(byte)라고 한다. 이때 이진수 하나를 비트(bit)라고 한다. 즉 8비트 = 1바이트 이다. 일반적인 컴퓨터에서 int를 저장할 때, 총 4바이트의 공간을 차지한다. 즉 0x51이라는 메모리 주소에 정수를 저장하고 싶다면 0x51~0x54의 4칸을 차지하는 것이..
2024.03.28