전체 글 278

리마 2급 공부 노트 - 8.22

du (disk usage) 파일이나 디렉터리들이 디스크에서 차지하고 있는 크기를 출력 du -sh /* : / 이하에 있는 각 디렉터리별로 크기를 합쳐서 사람이 읽기 좋은 단위(KB, GB 등)로 출력하기 위한 명령 h : human-readable 의 약자. s : 파일들의 전체 크기를 합한 값만 보여줌 /etc/fstab 이 파일은 파일 시스템에 대한 다양한 정보를 담고 있는 파일로 부팅 시에 마운트할 파티션 정보가 기록되어 있는 파일이기도 한다. 파티션 정보를 변경하였거나 디스크를 추가한 경우 이 파일에 등록해야만 부팅 시에 자동으로 마운트할 수 있다. mount, umount, fsck 등의 명령어가 수행될 때 이 파일의 정보를 참조한다. /etc/fstab/ 파일은 총 6개의 필드로 구성되어 ..

🦇 Linux 2021.08.23

리마 2급 공부 노트 - 8.20

chmod 파일이나 디렉터리 접근 허가권을 변경하는 명령어 -R : 하위 디렉터리에 포함되어 있는 모든 디렉터리 및 파일의 권한 변경 '숫자모드' 와 '기호모드' 가 있다. chmod 666 TST.txt -> 읽기(4), 쓰기(2), 실행(1) 중에 읽기와 쓰기 권한이 모든 사용자에게 부여됨 chmod -R o+w Youngjin -> 디렉터리 Youngjin 과 Youngjin 디렉터리에 포함되어 있는 모든 파일들은 기타 사용자 권한을 쓰기 권한으로 변경한다. chmod o=rx -> 기타 사용자(o)에게 읽기와 실행 권한 부여(+와 비슷) umask 파일의 기본 권한은 666, 디렉터리의 기본 권한은 777이다. 명령어 umask는 디폴트 권한 값을 변경한다. -S : umask 값을 문자로 표기 ..

🦇 Linux 2021.08.20

Music Library Program - add_song 함수

※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다. add_song 함수를 구현하기 위해서는 다음과 같은 자료구조의 이해가 필요하다. 한 명의 가수를 구현하는 "구조체 Artist" 가 있다. 그 안에 이 가수의 노래 세 곡이 있다면 노래들을 양방향 리스트로 만들어준다. 이때 직접 Song 을 만드는 대신에 SNode 를 만든다. (= 각각의 SNode 가 Song을 거느린다.) 가수의 구조체 안 head와 tail 에 곡 첫번째와 마지막을 저장해준다. (양방향 리스트이므로) 가수 구조체는 artist_directory 배열의 이니셜에 따라 분류해서 단방향 연결리스트로 만들어준다. next 는 가수끼리 단방향 연결리스트로 연결해주..

💡 자료구조 2021.08.19

Music Library Program 구현 시작

※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다. main.cpp 에서 read_line 함수를 호출하면 string_tools.cpp 에서 read_line 함수를 정의한 것을 불러오게 됨 이들을 연결시켜주기 위한 메커니즘은.. string_tools.h에 read_line 함수의 프로토타입을 써주어야 하고 main.cpp에 #include "string_tools.h" 헤더파일 포함시켜야 함 그리고 string_tools.cpp 에 자신이 해당하는 헤더파일 include "string_tools.h" 해서 포함시켜주면 연결 완성 #pragma once #include int read_line(FILE *fp, char str..

💡 자료구조 2021.08.19

이중연결리스트

단방향 연결 리스트(single linked list)의 한계: 어떤 노드의 앞에 새로운 노드를 삽입하기 어렵다 삭제의 경우에 항상 삭제할 노드의 앞 노드가 필요하다 단방향의 순회만이 가능하다 이중 연결 리스트 각각의 노드가 다음(next) 노드와 이전(previous) 노드의 주소를 가지는 연결 리스트 양방향의 순회(traverse)가 가능하다 Node struct node { char *data; /* 각 노드에 하나의 문자열이 저장된다고 가정함 */ struct node *next; struct node *prev; }; typedef struct node Node; Node *head; Node *tail; int size = 0; 앞서 단방향 연결리스트(Single linked list)에서 ①..

💡 자료구조 2021.08.10

연결리스트 - 다항식

※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다. 내림차순으로 정렬된 항에서 새로운 항을 삽입해야 하므로 두 포인터 p, q 를 이용한다. 공식처럼 외워야 할 것은 정렬된 항에서 삽입할 때에는 두 포인터를 이용하는 것이 좋다는 것이다. 그리고 이때 q는 항상 p의 한발 뒤를 따라가야 한다. addafter 가 간단하기 때문이다. Term p = first; Term q = null; while (p != null && p.expo > e) { q = p; // q는 항상 p의 한발 뒤를 따라감 p = p.next; } add_after(q); p는 연결리스트의 노드들을 순회하면서 특정한 노드를 찾는 데 쓰고 q는 p의 뒤를 쫓아..

💡 자료구조 2021.08.04

연결리스트 - 함수들 정리

※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다. void add ( int index, ...) 연결리스트의 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 != NULL) { add_after(prev, item); return 1; } return 0; } 삽입에 실패하면 0을, 성공하면 1을 ..

💡 자료구조 2021.08.04

연결리스트 - 순회하기

연결리스트 순회 (traverse) 연결리스트의 노드들을 처음부터 순서대로 방문하는 것을 순회(traverse) 한다고 말한다. 아래 함수는 입력된 문자열 word와 동일한 단어를 저장한 노드를 찾아서 그 노드의 주소를 반환한다. 그것을 위해서 연결리스트를 순회한다. Node *find(char *word) { /* 검색할 단어를 받는다. */ Node *p = head; /* p가 첫번째 head 노드를 가리키도록 함 */ while (p != NULL) { if (strcmp(p->data, word)==0) /* word : 내가 찾는 단어 */ return p; p = p->next; } return NULL; } 검색할 단어를 먼저 받는다. 그리고 p가 head 노드를 가리키도록 한다. p가 N..

💡 자료구조 2021.08.04

연결리스트 - 삭제하기

1. 첫번째 노드의 삭제 head 가 현재 head 노드의 다음 노드를 가리키게 만든다. head = head -> next; Node * remove_first () { /* 주소 리턴 */ if (head == NULL) { return NULL; } else { Node *tmp = head; /* head 노드의 주소를 임시로 보관할 포인터 */ head = head->next; return tmp; /* head 노드의 주소 리턴 */ } } if 문에서 head 가 NULL 이라는 것은 연결리스트의 노드가 하나도 없음을 의미한다. 이 경우 return NULL 로 처리한다. else문에서 head의 주소를 임시적으로 tmp 가 가지고 있게 한다. head = head -> next 에 의해 첫..

💡 자료구조 2021.08.04

연결리스트 - 삽입하기

1. 연결리스트의 맨 앞에 새로운 노드 삽입하기 다음과 같은 알고리즘을 기억하면 좋다. 1) 새로운 노드를 만들고 추가할 데이터를 저장한다. 2) 새로운 노드의 next 필드가 현재의 head 노드를 가리키도록 한다. 3) 새로운 노드를 새로운 head 노드로 한다. 다음과 같이 코드를 작성할 수 있다. Node *tmp = (Node *)malloc(sizeof(Node)); // 새로운 노드 생성 tmp->data = “Ann”; // (1) 추가할 데이터 저장 tmp->next = head; // (2) 새로운 노드의 next 는 기존의 head를 가리키게 한다 head = temp // (3) head 는 temp 로 한다 이와 관련 함수 작성 1) head = 전역변수 void add_first..

💡 자료구조 2021.08.02