컴퓨터기본/자료구조 6

5. Doubly Linked List

Doubly Linked List Doubly Linked LIst 가 일반 Linked List와 다른 것은 각 노드가 next 뿐만 아니라, front 노드 값도 저장하고 있다는 점이다. 따라서 리스트에서 앞 뒤 데이터를 추출하기에 용이하다. 또 하나 다른 점은 LIST 안에 rear 포인터를 두어서 리스트의 마지막 노드도 참조할 수 있도록 했다. 비록 이건 반드시 Doubly Linked List의 특징이라고 할 수 없겠지만, 연습을 위해 추가해보았다. data.h & data.c 매우 간단하다. 심지어 따로 compare 함수를 사용하지도 않았고, key가 int형이라고 고정한 상태로 compare 하는 과정도 dll.c 안에 코드를 짜버렸다. typedef struct myData { int k..

4. General Linear Lists

- operations can be done anywhere in the list - Basic operations insertion deletion retrieval traversal 어디에서나 삽입, 삭제, 추출 등이 가능하기 위해서 - insertion: pPre - deletion: pPre. pLoc - retrieval: key 등 포인터를 추가한다. 1. int 데이터 저장하는 리스트 gll.h #include #include #define TRUE 1 #define FALSE 0 typedef int LData; typedef struct node { struct NODE* next; LData data; }NODE; typedef struct gllist { NODE* head; int ..

3. Queue

1. Queue란? - linear list in which data can only be inserted at one end (한 쪽 끝에서만 데이터가 들어가지는 연결 리스트) - has rear and front (rear와 front를 가짐) - ensures that data are processed in the order in which they are received (FIFO) (들어온 순서대로 데이터가 , first in first out) Operations 1) Create Queue 2) Enqueue 3) Dequeue 4) Destroy Queue 2. 구현 이번에는 큐 안에 저장될 데이터를 기본 데이터형으로 하지 않고 바로 구조체로 만들어보았다. student.c & studen..

2. Stack (Linked list)

Stack 기본 구조 스택은 위에 쌓이고 위에서부터 추출된다. 내가 구현한 스택은 2. ArrayList 같이 배열에 저장하는 게 아니라, 한 노드에 다음 노드를 가리키는 포인터가 존재해서 쭉 이어나가는 Linked List를 사용한 스택이다. 1. int 데이터를 저장하는 stack stack.h #include #ifndef __STACK_H__ #define __STACK_H__ #define TRUE 1 #define FALSE 0 typedef int LData; typedef struct _node { LData data; struct NODE* next; //struct 필수 }NODE; typedef struct s_stack { NODE* top; int count; int size; }..

1. 재귀, ADT

Big-O Notation 알고리즘의 효율성을 표기할 때 Big-O notation을 사용한다. n²의 증가율을 n이 절대 따라잡을 수 없으므로 그냥 가장 큰 차수를 기준으로 따지는 것 ex) T(n) = 5n²+n+1 => O(n²) Big-O의 정의 두 개의 함수 f(n), g(n)이 주어졌을 때, 모든 n>=k에 대해 f(n) C로 옮긴다 2) 단, 작은 원반 위에 큰 원반을 놓을 수 없다. 해결 방법: 하노이 타워는 재귀 함수로 해결 가능하다! 코드 작성: #include void hanoiTower(int num, char from, char by, char to) { if (num == 1) { //하나일 때는 그냥 옮김 printf("move 1 from %c to %c \n", from, ..