본문 바로가기

C언어18

자료구조 10일차 : 히프 오늘은 히프에 대해서 알아보겠습니다. 히프란 완전 이진트리에 있는 노드 중에서 값이 가장 큰 노드나 가장 작은 노드를 찾기 위해서 만든 구조입니다. 최대 히프와 최소히프 입니다. 최대히프는 부모 노드가 자식노드보다 큰 구조이며 결과적으로 루트 노드가 가장 큰 값을 가지게 됩니다. 최소히프는 부모노드가 자식노드보다 값이 작으며 결과적으로 루트 노드가 가장 작은 값을 가지게 됩니다. 일반적으로 히프 라고 말한더면 최대 히프를 가리키는 말이 되겠습니다. 완전 이진트리 구조에서 17의 데이터를 추가할 때의 모습입니다. 최대 히프인지, 최소 히프인지에 따라 값을 비교하여 올바른 위치에 데이터를 넣어주어야 합니다. 소스를 보겠습니다. #pragma once #define MAX_ELEMENT 50 typedef s.. 2023. 1. 14.
자료구조 9일차 : 트리 오늘은 선형구조를 마치고 비선형 자료구조인 트리에 대해서 알아보겠습니다. 비선형자료구조는 앞서 알아보았던 선형 자료구조와 달리 규칙이 없는 것이 특징입니다. 트리의 모양과 각 노드들의 역할입니다. 트리의 구조가 모두 위와 같은 것은 아니며 트리의 형태를 예시로 든 것입니다. 맨 위에 위치한 노드를 루트노드라고 부르며 레벨 0 이러고도 부릅니다. 그 아래로 루트 노드와 연결되어 있는 노드 B, C를 레벨 1 이라고 부릅니다. 노드 B, C를 노드 A의 자식노드라고 부르며 노드 A는 노드 B, C의 부모 노드라고 부릅니다. 같은 방식으로 노드 D, E, F는 레벨 2 이며 노드 G, H, I는 레벨 3입니다. 같은 줄에 있는, 즉, 같은 레벨인 노드들은 형제노드라고 부릅니다. 트리는 여러갈래로 뻗어져있는 모.. 2023. 1. 13.
자료구조 8일차 : 연결리스트 지난시간에 이어서 연결리스트를 이어 해보겠습니다. 저번 시간에 position의 인덱스에 위치한 데이터를 가져오는 getLiinkedListData() 연산자까지 진행을 해보았습니다 오늘은 연결 리스트에 자료를 추가하는 addLinkedListData() 연산자부터 알아보겠습니다. 연결리스트에서 position의 위치에 데이터를 넣기 위해서는 기준이 되는 자료를 찾고 그 뒤에 자료를 추가해야 합니다. 사용자가 연결리스트에 데이터를 삽입하는 종류는 1. 인덱스 0에 삽입. 즉, 첫 번째 위치에 삽입하는 방법 2. 인덱스 1, 2...등등 첫 번째와 마지막이 아닌 중간 위체에 삽입하는 방법 3. 맨 마지막 인덱스 뒤에 삽입. 즉, 맨 마지막 위치에 넣는 방법이 있습니다. 위의 방법들 중에 가장 까다로운 방법.. 2023. 1. 12.
자료구조 7일차 : 연결리스트 오늘은 지난 시간에 살펴본 배열리스트에 이어서 연결리스트에 대해 알아보겠습니다. 연결리스트는 주소(포인터)를 이용하여 리스트를 구현한 자료구조들 중에 하나입니다. 연결리스트 또한 주소(포인터)를 이용해서 노드끼리 연결합니다. 연결리스트를 구현하기 위해서는 우선 노드의 구조를 생각하여 구조체로 선언해야합니다. 위의 그림과 같은 구조를 가질 수 있도록 노드 안에 데이터를 담을 공간과 링크를 선언해 구조체를 만들어줍니다. 배열리스트와 연결리스트의 차이점 입니다. 연결리스트는 스택, 큐와 다르게 헤더노드라는 것이 존재합니다. 헤더노드는 실제 자료를 저장하는 노드가 아니라 다음 노드에 대한 링크(주소)를 저장하는 노드를 뜻합니다. 자료를 저장하지 않음으로 노드의 개수에 포함시키지 않습니다. 헤더노드는 앞으로 들어.. 2023. 1. 10.
자료구조 6일차 : 배열 리스트 오늘은 배열 리스트에 대해서 알아보겠습니다. 저번 시간동안에 큐와 스택에 대해서 알아보았으니 리스트는 이해하기 쉬우실겁니다. List 는 순서대로 자료를 나열하는 방법으로써 가장 많이 사용하는 자료구조형입니다. 여기서 선형과 비선형 자료구조에 대해서 각각 짚고 넘어가보겠습니다. 선형 자료구조는 순서대로 자료를 나열하는 방법이고 비선형 자료구조는 순서대로가 아니라 불규칙 적인 방법으로 자료를 나열하는 구조입니다. 리스트에서 사용하는 추상형 자료형들입니다. 5, 6, 7 의 차이를 잘 알고 넘어가야합니다. removeListData()는 특정 데이터만 삭제하고 메모리는 삭제하지 않습니다. deleteList()는 데이터와 메모리 둘 다 삭제(해제)합니다. clearList()는 모든 데이터를 삭제하고 메모리.. 2023. 1. 9.
자료구조 5일차 : 데크큐와 linked 스택, 배열 스택 데크큐에 대해서 알아보겠습니다. 데크큐란 두개의 큐를 합친 것으로써 양방향에서 삽입과 삭제가 이루어집니다. 두 개의 큐를 이어준 형태로써쌍방향에서 링크가 이루어져야 하므로 llink, rlink가 존재합니다. 위와 같이 쌍방향으로 링크가 서로 연결되있는 것을 확인할 수 있습니다. front와 rear는 일반 큐와 똑같이 존재합니다. 헤더파일을 선언해보겠습니다. #pragma once typedef char element; //원소 (element)의 자료형을 char로 정의 typedef struct DQNode { //데이터와 llink, rlink를 가지고 있는 구조체를 선언 element data; struct DQNode* rlink; struct DQNode* llink; }DQNode; typ.. 2023. 1. 8.
자료구조 3, 4일차 : 큐 오늘은 지난 시간에 하던 스택을 마무리 짓기 전에, 스택의 이해를 돕기 위해서 좀 더 쉬운 큐에 대해서 공부하고 지나가겠습니다. 지난 시간에 스택이란, LIFO구조로써 마지막에 삽입된 데이터가 처음으로 나가는 구조였습니다. 그에 반해서 큐는 FIFO, 즉 처음으로 들어온 데이터가 처음으로 나가는 구조를 가지고 있습니다. 스택과 큐의 명령들의 차이입니다. 이름의 차이 외에는 삭제위치가 차이가 있습니다. 스택은 마지막에 들어온 데이터가 첫 번째로 삭제가 되기 때문에 top에 위치한 데이터가 먼저 삭제가 되고, 큐는 처음으로 들어온 데이터가 첫 번째로 삭제가 되기 때문에 front에 위치한(처음으로 들어온) 데이터가 삭제가 됩니다. 큐의 생성 단계 첫 번째 입니다. createQueue라는 연산자를 사용해 공.. 2023. 1. 5.
자료구조 2일차 : 스택에 대하여 오늘은 저번시간에 이어서 스택에 대해 더 알아보겠습니다. 스택은 선형 자료구조입니다. 스택은 후입선출 구조로써 데이터를 삽입할 때는 push, 데이터를 삭제할 때에는 pop을 사용합니다. peek은 pop과 유사한 용도로써 pop은 데이터를 삭제하지만 peek은 데이터를 삭제하지 않고 메모리를 반납한다는 차이점이 있습니다. 스택에는 array구조와 list구조로 이루어져있으며 array스택은 배열을 이용해 서로를 연결하고, list스택은 포인터를 사용해 서로를 연결합니다. 모든 자료구조의 명령은 추상형으로써 push, pop등이 c언어에서 정의한 명령어가 따로 있는 것이 아니라 사용자가 직접 정의를 해주어야 합니다. 스택에 필요한 명령들의 대중적인 이름, 용도, 기능을 정리한 표입니다. 선형자료구조인 스.. 2023. 1. 3.
자료구조 1일차 : 자료구조의 개념과 stack 자료구조의 간단한 개념과 stack에 대해서 알아보겠습니다. 자료구조란 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것입니다. 자료구조의 대략적인 가지입니다. 선형 자료구조와 비선형 자료구조의 차이는 간단하게 그림으로 표현할 수 있겠습니다. 오늘은 이들 중에서 선형 자료구조의 stack에 대해서 알아보겠습니다. stack은 말그대로 자료를 쌓는 것처럼 저장합니다. 또한 LIFO, 즉 마지막에 들어온 데이터가 처음으로 나가는 후입선출의 구조를 가지고 있습니다. 데이터들을 쌓으면 마지막의 데이터가 맨 뒤에 위치하기 때문입니다. 데이터를 삽입하는 것을 push, 데이터를 삭제하는 것을 pop, 마지막에 삽입된 값을 top이라 부릅니다. (맨 위에 있기 때문) 스택의 진행 과정을 그림으로 표현한 것.. 2023. 1. 2.
C 언어 10일차 : 전역변수와 함수, 헤더파일, #define 전역변수에 대해 알아보겠습니다. 전역변수란 보통적으로 함수 안에 선언되어 함수가 끝남과 동시에 초기화 되는 지역변수와 달리 함수 밖에 선언되어 프로그램 종료시 까지 초기화가 되지 않는 변수를 말합니다. 1. 프로그램이 종료될 때까지 메모리에 상주 2. 전역변수는 자동 초기화 ( 정수 ==> 0, 실수 ==> 0.0... ) 3. 전역변수는 값을 저장하고 있다. 3번의 전역변수는 값을 저장하고 있다 라는 말을 예시를 통해 설명하겠습니다. #include int a = 50; //전역변수는 함수 밖에 선언 void func1() { int a = 100; printf("func1()함수의 a의 값은 => %d\n", a); } int main(void) { func1(); printf("main()함수의 값.. 2022. 12. 30.