분류 전체보기 119

[C][강의정리] 큐 개념과 구현 (1)

https://youtu.be/_aU2e70gYlo 큐의 개념 일종의 리스트 삽입은 한쪽 끝에서, 삭제는 반대쪽 끝에서만 일어남. 삽입이 일어나는 쪽을 rear, 삭제가 일어나는 쪽을 front First In, First Out 예, 프린터 큐 enqueue: 큐 rear에 새로운 원소를 삽입하는 연산 dequeue: 큐 front에 있는 원소를 큐로부터 삭제 peek: 큐 front에 있는 front에 있는 원소를 제거하지 않고 반환하는 연산 is_empty: 큐가 비었는지 검사 큐의 응용 CPU 스케쥴링 데이터 버퍼 그 외에도 자원을 공유하는 대부분의 경우에 큐가 사용됨 큐의 규현 //queueADT.h #ifndef QUEUEADT_H #define QUEUEADT_H #include typed..

[C][강의정리] 연결 리스트 개념과 기본 동작들 (5)

https://youtu.be/s-c2IbG0E_I 연결리스트 순회하기 Node *get_node(int index) { if (index next; return p; } 연결리스트의 index번째 위치에 새로운 노드를 만들어서 삽입한다. void add(int index, ...) int add(int index, char *item) { if (index < 0) return 0; if (index == 0) { add_first(item); return 1; } Node *prev = get_node(index - 1); if (prev != NUL..

[C][강의정리] 연결 리스트 개념과 기본 동작들 (4)

https://youtu.be/0kddqbHGGsM 어떤 노드 뒤에 새로운 노드 삽입하기 Node *tmp = (Node *)malloc(sizeof(Node)); tmp->data = data_to_store; tmp->next = prev->next; prev->next = tmp; insert_after() // 삽입에 성공하면 1, 아니면 0을 반환 int add_after(Node *prev, char *item) { if (prev == NULL) return 0; Node *tmp = (Node *)malloc(sizeof(Node)); tmp->data = item; tmp->next = prev->next; prev->next = tmp; return 1; } 첫번째 노드의 삭제 Node..

[C][강의정리] 연결 리스트 개념과 기본 동작들 (3)

https://youtu.be/9Qi3PhBSzA0 * 연경리스트의 맨 앞에 새로운 노드 삽입하기 (1) 새로운 노드를 만들고 추가할 데이터를 저장한다. malloc 사용 (2) 새로운 노드의 next필드가 현재의 head노드를 가리키도록 한다. (3) 새로운 노드를 새로운 head노드로 한다. Node *tmp = (Node *)malloc(sizeof(Node)); tmp->data = "Ann"; tmp->next = head; head = tmp; 첫번째 노드를 가리키는 포인터 head가 전역변수인 경우 void add_first(char *item) { Node *temp = (Node *)malloc(sizeof(Node)); temp->data = item; temp->next = head;..

[C][강의정리] 연결 리스트 개념과 기본 동작들 (2)

https://youtu.be/BP9lJ-Fq72w // 예제 프로그램 int main() { head = (Node *)malloc(sizeof(Node)); head->data = "Tuesday"; head->next = NULL; Node *q = (Node *)malloc(sizeof(Node)); q->data = "Thursday"; q->next = NULL; head->next = q; q = (Node *)malloc(sizeof(Node)); q->data = "Monday"; q->next = head; head = q; Node *p = head; while (p! = NULL) { printf("%s\n", p->data); p = p->next; } }

[C][강의정리] 연결 리스트 개념과 기본 동작들 (1)

https://youtu.be/eTwYE-ercNM 리스트 기본적인 연산: 삽입, 삭제, 검색 등 리스트를 구현하는 대표적인 두 가지 방법: 배열, 연결리스트 배열의 단점 크기가 고정 - reallocation이 필요 리스트의 중간에 원소를 삽입하거나 삭제할 경우 다수의 데이터를 옮겨야 배열의 장점 랜덤 엑세스가 가능 연결리스트 다른 데이터의 이동없이 중간에 삽입이나 삭제가 가능 길이의 제한이 없음 하지만 랜덤 엑세스가 불가능 각각의 노드는 필요한 데이터 필드와 하나 혹은 그 이상의 링크 필드로 구성 링크 필드는 다음 노드의 주소를 저장 첫 번째 노드의 주소는 따로 저장해야 연결리스트의 첫 번째 노드의 주소는 따로 저장해야하며 절대 잊어버려서는 안됨. 마지막 노드의 넥스트 필드에는 널값을 저장하여 연결리..

[C][강의요약] 스택의 구현 (2)

https://youtu.be/Vj_JOmL1nyE 배열을 이용한 구현 // stack.c #include "stack.h" // push, pop 등 함수들의 프로토 타입만 모은 헤더 파일 만들기. #define MAX_CAPACITY 100 // stack이라는 이름의 스택을 구현 // 스택에 저장되는 데이터의 타입을 문자(char)라고 가정하자. char stack[MAX_CAPACITY]; int top = -1; voidpush(char ch) { // 스택이 가득차면 더이상 push 할 수 없다. if (if_full()) return; top++; stack[top] = ch; } char pop() { char tmp = stack[top]; top--; return tmp; } // pe..

[C][강의요약] 스택의 개념과 구현 (1)

https://youtu.be/MaLRjxoaowA 스택은 일종의 리스트 리스트는 일렬로 데이터가 있을 때, 데이터 리스트 검색, 삽입, 삭제 연산 가능 데이터가 맨 앞, 중간, 마지막 어디든 삽입 가능 스택, 일종의 리스트, 데이터의 삽입과 삭제가 한쪽에서만 이루어지는 것을 말함 물건을 쌓아 놓을 때 맨 위에 올려 놓고, 맨 위의 자료를 빼내는 것 떠올리면 됨. Last-In, First-Out 삽입과 삭제가 일어나는 쪽을 top이라고 부름. 어떤 데이터들을 저장해둘 수 있는 리스트인데, 그 맨 위에서 데이터를 추가하고 삭제하는 방식이다. 스택이 지원하는 연산 필수 연산 push: 스택에 새로운 원소를 삽입하는 연산 pop: 스택의 top에 있는 원소를 스택에서 제거하고 반환 보조 연산 peek: 스택..

반응형