CS(87)
-
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(5)
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 연결 리스트 순회하기 순회(traverse): 연결 리스트의 노드들을 처음부터 순서대로 방문하는 것 p = p → next; 그 다음 주소로 넘어감 //입력된 문자열 word와 동일한 단어를 저장한 노드를 찾아 //그 노드의 주소를 반환하는 함수 Node *find(char *word){ //연결 리스트를 순회할 노드 포인터 p //처음에는 첫 번째 노드를 가리키도록 Node *p = head; while(p != NULL){ //p가 null이 될 때 까지 if (strcmp(p-> data, word) == 0) return p; //찾으면 그 주소를 반환 p = p -> next; //그렇지 않으면 다음 주..
2022.10.19 -
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(4)
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 어떤 노드 뒤에 새로운 노드 삽입하기 새로운 노드를 만들고 데이터를 저장한다. 새로운 노드의 next 필드가 prev의 다음 노드를 가리키도록 한다. 새로운 노드를 prev의 다음 노드로 만든다. #include #include struct node{ char * data; struct node * next; }; typedef struct node Node; Node *head = NULL; void main(){ Node *temp = (Node*)malloc(sizeof(Node)); temp -> data = data_to_store; temp -> next = prev->next; prev -> next..
2022.10.19 -
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(3)
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 연결 리스트의 맨 앞에 새로운 노드 삽입하기 새로운 노드를 만들고 → 추가할 데이터를 저장 배열) 공간을 미리 잡아두고 데이터를 수시로 채움 연결 리스트) 필요할 때마다 동적 할당으로 노드를 생성 ~ 노드의 개수 = 데이터의 개수 새로운 노드의 next 필드가 현재 head 노드가 가리키는 노드를 가리키도록 한다. 현재의 head 노드가 가리키는 노드의 주소는 head 노드에 저장되어 있다. head노드는 첫 번째 노드를 가리킴 새로 생성한 노드를 새로운 head 노드로 한다 이 과정을 앞선 과정보다 먼저하면 원래 가리키고 있었던 첫 번째 노드의 주소를 분실하기 때문에 순서에 유의 #include #include..
2022.10.18 -
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(2)
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 연결 리스트 예제프로그램 연결 리스트는 노드 10개를 미리 만들어두고 사용하지 않고 필요한 그때그때마다 노드를 만들어서 연결 리스트에 추가한다. 연결 리스트 예제프로그램 목표 struct node{ char * data; struct node * next; }; typedef struct node Node; Node *head = NULL; 1-1. 2nd int main(){ //어떤 구조체를 가리키는 포인터 head Node *head = (Node *)malloc(sizeof(Node)); //head가 가리키는 구조체 안의 data 멤버를 엑세스할 때 화살표 연산자를 쓴다. //head->data = "2..
2022.09.20 -
[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(1)
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 리스트(List) List: 리스트: 원소들 간의 순서 개념 O ex) (1, 2, 3) ≠ (3, 2, 1) Set: 집합: 원소드 간의 순서 개념 X ex) {1, 2, 3} == {3, 2, 1} 리스트: 하나가 아닌 여러 개가 쭉 일렬로 나열되어 있는 것 기본적인 연산: 삽입(insert), 삭제(remove), 검색(search) 리스트를 구현하는 대표적인 두 가지 방법 - 배열, 연결 리스트 배열 장점) 랜덤 액세스가 가능한 자료구조 배열의 이름은 포인터 변수이고, 이 포인터 변수는 배열의 시작 주소를 가지고 있다. 배열의 각 칸은 동일한 타입이다 → 배열의 각 칸은 크기가 동일하다. 배열의 각각의 항..
2022.09.20 -
[자료구조 - C언어] 자료구조 [1강-10강] 복습 및 정리
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 자료구조 1강 메모리 모든 변수는 주소를 가진다. 포인터 포인터는 메모리 주소를 값으로 가지는 변수이다. type-name * variable-name; variable-name은 선언된 포인터 변수의 이름 *는 포인터 변수임을 표시하는 기호 type-name은 * variable-name이 저장하는 메모리 주소에 저장된 값의 데이터 타입 & 연산자: 엠퍼센트 연산자 &(엠퍼센트)는 변수로부터 그 변수의 주소를 추출하는 연산자 int a = 100; int *ptr = &a; //ptr = 변수 a의 주소 값 ptr은 주소값을 저장 → *ptr은 ptr(주소값) 가리키는 값 ptr은 a의 주소 값을 저장 → *ptr은..
2022.08.17 -
[자료구조 - C언어] 자료구조 제10강: 전화번호부 v5.0
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 구조체에 대한 포인터, 동적 메모리 할당 구조체의 배열 → 구조체 포인터의 배열 1. C언어에서의 매개 변수 전달 방식 typedef struct person{ char * name, number, email, group; } Person; //Person 타입의 디렉토리 배열 선언 Person directory[CAPACITY]; C언어에서 구조체의 배열은 일반적인 방법이 아니다. void status(){ int i; for(i=0;i=0 && strcmp(directory[i].name, name)>0){ //구조체 이기 때문에 name, number 배열을 따로 이동할 필요 없이 한 번에 이동 directory..
2022.08.09 -
[자료구조 - C언어] 자료구조 제9강: 전화번호부 v4.0
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 더 많은 항목, 구조체 업데이트되는 점 각 사람에 대해 이름, 전화번호, 이메일, 그룹을 지정할 수 있다. 이름을 제외한 항목은 비워둘 수 있다. 이름이 여러 단어일 수 있다. 단어 사이에 여러 개의 공백은 한 칸의 공백으로 저장된다. → 한 단어씩 읽기가 어렵다 1. 구조체 항상 같이 붙어다녀야 하는 데이터를 별개의 변수들에 분산해서 저장하는 것은 바람직하지 않다. names, numbers, emails, goups로 서로 다른 4개의 배열에 분산해서 저장하는 것 X 구조체(structure): 항상 같이 붙어 다녀야 하는 데이터들을 하나의 그룹으로 묶어주는 역할 typedef struct person{ char ..
2022.06.02 -
[자료구조 - C언어] 자료구조 제8강: 전화번호부 v3.0
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 배열 재할당, 라인 단위 입력과 문자열 tokeninzing #include #include #include #define INIT_CAPACITY 3 #define BUFFER_SIZE 50 void init_directory(); void process_command(); int read_line(char str[], int limit); char ** names; char ** numbers; int capacity = INIT_CAPACITY; int n = 0; char delim[] = " "; int main(){ init_directory(); //배열 names, numbers를 동적 메모리 할당으로 ..
2022.05.24 -
[자료구조 - C언어] 자료구조 제5강: 전화번호부 v2.0
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 파일로 저장하고 로드하기, 알파벳 순으로 정렬 https://ksk9820.tistory.com/138 코드 참고 void load(); void save(); int search(); if (strcmp(command, "read") == 0) load(); else if (strcmp(command, "save") == 0) save(); 1. load() void load(){ char fileName[BUFFER_SIZE]; char buf1[BUFFER_SIZE]; char buf2[BUFFER_SIZE]; scanf("%s", fileName); // 파일의 이름을 입력받음 FILE *fp = fopen(f..
2022.05.06 -
[자료구조 - C언어] 자료구조 제4강: 전화번호부 v1.0
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 자료구조 프로그램에서 사용되는 data들을 어디에 어떤 구조로 저장할 것인지 어떤 자료구조가 필요한지? 어떤 data를 다루는지에 따라 복습) 배열을 사용하는데 필요한 3가지 요소 배열의 이름 배열의 크기 배열의 타입: 각 칸에 저장되는 데이터의 타입 전화번호부의 이름: names의 문자열의 각 칸은 John과 같은 이름의 주소를 가리키고 있다. char * names[100]; 전화번호부의 번호: numbers의 문자열의 각 칸은 01012345678과 같은 문자열의 주소를 가리키고 있다. char * numbers[100]; 2. 전화번호부 v1.0 #include #include #define CAPACIT..
2022.04.28 -
[자료구조 - C언어] 자료구조 제3강: 문자열 예제
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 문자를 입력받고 출력하기 + 문자 길이 #include #include #define BUFFER_SIZE 20 int main(void){ char buffer[BUFFER_SIZE]; while(1){ printf("$ "); //scanf("%s", buffer); //scanf %s는 공백 단위로 단어 하나씩만 입력받음 //gets(buffer); //gets는 줄바꿈 문자가 나올 때 까지 통째로 읽음 fgets(buffer, BUFFER_SIZE, stdin); printf("%s:%d\\n", buffer, strlen(buffer )); } } scanf %s는 공백 단위로 단어 하나씩만 입력받기 때..
2022.04.26