자료구조
-
자료구조 제 13-3 강 (스택의 구현 2)자료구조 2022. 3. 14. 15:10
static 지역변수에 사용할 경우: 프로그램 종료 시까지 메모리 공간이 남아있음 전역변수에 사용할 경우: 다른 파일에서 해당 변수에 접근하는 것을 막아줌 stackADT.c #include #include #include "stackADT.h" #define INIT_CAPACITY 100 struct stack_type { Item* contents;/* 배열 */ int top; int size;// 배열의 크기 }; static void terminate(const char* message)// 예외 사항이 발생했을 때, 그에 관한 메세지 출력 후 exit { printf("%s\n", message); exit(1); } Stack create()// Stack* craete()가 아닌 이유: ..
-
자료구조 제 13-2 강 ( 스택의 구현 )자료구조 2022. 3. 14. 00:08
배열을 이용한 구현 #include "statck.h" #define MAX_CAPACITY 100 char stack[MAX_CAPACITY];// 스택에 저장되는 데이터의 타입을 문자(char)라고 가정 int top = -1;// index of the top element void push(char ch) { if (is_full())// 스택이 가득차면 더이상 push할 수 없다. return; top++; stack[top] = ch; } char pop() { char tmp = stack[top]; top--; return tmp; } char peek() {// peek을 호출하기 전에 먼저 empty인지 검사해야 한다. return stack[top]; } int is_empty() {..
-
자료구조 제 13-1 강 (스택의 개념과 구현)자료구조 2022. 3. 13. 23:55
스택 일종의 리스트 단, 데이터의 삽입과 삭제가 한쪽 끝에서만 이루어짐 LIFO (Last-In, First-Out) 삽입/삭제가 일어나는 쪽을 스택의 top이라고 부름 스택이 지원하는 연산 push: 스택에 새로운 원소를 삽입하는 연산 pop: 스택의 top에 있는 원소를 스택에서 제거하고 반환 peek: 스택 top의 원소를 제거하지 않고 변환 empty: 스택이 비었는지 검사 스택 응용 예: 괄호 검사 문제 입력 수식의 괄호가 올바른지 검사 단순히 여는 괄호와 닫는 괄호의 개수 비교만으로는 부족 스택을 이용하여 검사 ex) [ a + b * { c / ( d - e ) } ] + ( d / e ) 여는 괄호는 스택에 push 닫는 괄호가 나오면 스택에서 pop한 후, 두 괄호가 같은 유형이어야 함 ..
-
*자료구조 제 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함수에..
-
자료구조 제 7강 (구조체)자료구조 2022. 2. 17. 21:11
기능 이름이 하나 이상의 단어로 구성될 수 있다. 단어 사이에 여러 개의 공백이 있을 경우 한 칸의 공백으로 저장된다. 이름을 제외하고는 모든 항목을 입력할 필요는 없다. 각 사람에 대해서 이름, 전화번호, 이메일 주소, 그룹을 지정할 수 있다. 저장방식 '#' 문자를 필드들 간의 구분자로 사용한다. 존재하지 않는 항목의 경우 하나의 공백문자로 표시한다. 모든 라인은 반드시 구분자로 끝난다. 한 줄에 한 명씩 저장한다. 구조체 항상 같이 붙어다녀야 하는 데이터를 별개의 변수들에 분산해서 저장하는 것은 바람직하지 않다. C언어에서는 이런 경우 구조체를 사용한다. 함수 fgetc(파일명) : 파일로부터 한 character를 읽음 /* * 2022-02-17 * phonebook04.c * 구조체 */ #d..