전체 글
-
*자료구조 제 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..
-
*자료구조 제 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..
-
이것이 자바다 | 5강_참조타입JAVA/이것이 자바다 2022. 1. 25. 01:15
1. 자바의 데이터 타입 기본타입 정수타입 실수타입 논리타입(boolean) 참조타입 배열타입 열거타입 클래스 인터페이스 기본타입과 참조타입의 차이점 기본타입: 실제 값을 변수에 저장 참조타입: 메모리의 번지를 값으로 가짐 2. 메모리 사용 영역 메소드 영역 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역 힙 영역 객체와 배열이 생성되는 영역 해당 영역에 생성되는 객체와 배열이 참조하는 변수나 필드가 없다면 의미 없는 객체가 되므로 이것을 쓰레기 취급하고 JVM이 쓰레기 수집기를 실행시켜 쓰레기 객체를 자동 제거한다. JVM 스택 영역 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당됨 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거한다. 3. NullPoin..