c언어
-
*자료구조 제 11강 (이중연결리스트)자료구조 2022. 2. 27. 02:07
단방향 연결 리스트의 한계 어떤 노드의 앞에 새로운 노드를 삽입하기 어려움 삭제의 경우에 항상 삭제할 노드의 앞 노드가 필요 단방향의 순회만이 가능 이중 연결 리스트 각각의 노드가 다음 노드와 이전 노드의 주소를 가지는 연결 리스트 양방향의 순회 가능 struct node { char* data; struct node* next; struct node* prev; }; typedef struct node Node; Node* head; Node* tail; int size = 0;//연결리스트의 노드의 개수 노드 삽입 Node* new_node = (Node*)malloc(sizeof(Node));//새로운 노드 생성 new_node->data = "Sharon"; new_node->next = p; n..
-
*자료구조 제 10강(연결리스트-다항식)자료구조 2022. 2. 25. 11:54
연결리스트를 이용하여 하나의 다항식을 표현하는 구조체 Polynomial을 정의한다. 다항식을 항들의 연결리스트로 표현한다. 항들을 차수에 대해서 내림차순으로 정렬하여 저장하며, 동일 차수의 항을 2개 이상 가지지 않게 한다. 또한 계수가 0인 항이 존재하지 않게 한다. 하나의 항은 계수와 지수에 의해 결정된다. 하나의 항을 표현하기 위해 구조체 Term을 정의한다. 변수 x의 값이 주어질 때 다항식의 값을 계산하는 함수를 제공한다. Polynomial 구조체는 name, first, size 필드로 구성되어 있다. name에는 다항식의 이름, first에는 식의 첫 항의 주소, size에는 항의 개수를 저장한다. Term 구조체는 coef, expo, next 필드로 구성되어있다. coef에는 계수, ..
-
자료구조 제 9강 (연결리스트-개념과 기본 동작들)자료구조 2022. 2. 22. 18:05
리스트 기본적인 연산: 삽입, 삭제, 검색 등 리스트를 구현하는 대표적인 두 가지 방법: 배열, 연결리스트 배열의 단점 크기가 고정 - reallocation이 필요 리스트의 중간에 원소를 삽입하거나 삭제할 경우 다수의 데이터를 옮겨야 함 연결리스트 다른 데이터의 이동없이 중간에 삽입하거나 삭제가 가능함 길이의 제한이 없음 랜덤 액세스가 불가능 랜덤 액세스: 배열의 시작주소에서 n번째 칸까지 한 번에 갈 수 있는 것과 같음 (ex. 시작주소 + (n * 1칸의 크기)) 연결리스트: 노드들이 link로 서로 연결되어있는 자료구조 노드: 어떤 데이터와 그 다음 데이터의 주소가 하나로 묶여있는 단위 각각의 노드는 필요한 데이터 필드와 하나 혹은 그 이상의 링크 필드로 구성 링크 필드는 다음 노드의 주소를 저장..
-
자료구조 8강 (구조체 포인터, 동적 메모리 할당)자료구조 2022. 2. 18. 17:53
구조체 포인터 배열을 사용 -> 구조체 배열로 v4.0에서의 add와 remove를 할 경우 복사해야하는 데이터의 양이 많기 때문 ->구조체를return하거나 함수의 매개변수로 받을 때 데이터가 모두 복사되어 데이터 사용량이 많아지기 때문 화살표 연산자 printf(" Group: %s\n", (*p).group); printf(" Group: %s\n", p->group); 위의 둘은 완전히 동일한 의미를 가짐. ->연산자를 사용하는게 좋음 /* * 2022-02-18 * phonebook05.c * 구조체 포인터, 동적 메모리 할당 * - main함수는 처음에 init()을 호출해주는 것을 제외하면 v4와 동일 * - read_line, compose_name은 v4와 동일 * - 변경된 add함수에..
-
*자료구조 제 6강자료구조 2022. 2. 15. 21:55
phonebook03 -잘못된 명령어에 대해서 적절히 반응 -저장된 사람의 수가 배열의 용량을 초과할 경우 동적 메모리 할당으로 배열의 크기를 키움 구분문자를 이용하여 하나의 긴 문자열을 작은 문자열들로 자르는 일을 문자열 tokenizing이라고 부른다. 잘라진 작은 문자열들을 보통 token이라고 부른다. strtok 원본 문자열을 변화시킴(구분자 자리에 '\0'을 삽입) -> 원본 문자열을 보존해야 한다면 문자열을 복사한 후 strtok을 실행해야함 문자열을 선언할 때 string literal (ex. char *str = "Hello world";)로 선언 할 경우 수정 불가능 하므로 strtok 오류 발생 (char str[] = "Hello world"; 가능) strtok은 새로운 배열을 ..
-
자료구조 제 5강자료구조 2022. 2. 15. 21:42
전화번호부v2.0 전화번호 삭제 -> 배열의 다음 인덱스부터 한 칸 씩 앞으로 정렬된 상태로 전화번호 저장 - strcmp()를 이용해서 사전식으로 정렬 #define _CRT_SECURE_NO_WARNINGS #include #include #define CAPACITY 100 #define BUFFER_SIZE 20 char* names[CAPACITY]; char* numbers[CAPACITY]; int n = 0; void add(); void find(); void status(); void remove(); void load(); void save(); int search(char* name); int main() { char buffer[BUFFER_SIZE]; while (1) { pri..
-
자료구조 제 4강자료구조 2022. 1. 24. 23:25
전역변수(global variable) Data section이라고 부르는 메모리 영역에 위치한다. 지역변수 (local variable) 스택(stack)이라고 부르는 영역에 위치한다. 동적 메모리 할당 (dynamic memory allocation) 아무때나 malloc등의 함수를 호출하여 필요한 크기의 메모리를 할당할 수 있다. 동적으로 할당된 메모리는 힙(heap)이라고 부르는 영역에 위치한다. 동적으로 할당된 메모리는 명시적으로 free()함수를 호출하여 반환하지 않는 한 계속 유지된다. 전화번호부v1.0 /* * 2022-01-24 * 전화번호부v1.0 */ #define _CRT_SECURE_NO_WARNINGS #include #include #define CAPACITY 100 #def..
-
자료구조 제2강자료구조 2022. 1. 9. 18:32
문자열 /*1번*/ char str[6]; str[0] = 'h'; str[1] = 'e'; str[2] = 'l'; str[3] = 'l'; str[4] = 'o'; str[5] = '\0'; /*2번*/ char str[] = "hello"; /*3번*/ char *str = "hello";// 이 방법은 수정이 불가능하다는 점에서 위 두 방법과 다르다. string.h strcpy 문자열 복사 strlen 문자열의 길이 strcat 문자열 합치기 strcmp 문자열 비교 #define _CRT_SECURE_NO_WARNINGS #include #define BUFFER_SIZE 100 /* 마지막에 입력한 문자열로 전부 출력됨 -> buffer에 저장된 값이 아닌 buffer의 주솟값이 저장되기 때..