분류 전체보기
-
스택(Stack) 쌓아놓은 더미, 즉 메모리가 쌓인 더미 영역을 말합니다. 스택의 특징 후입선출(LIFO:Last-In First-Out)로써 가장 최근에 들어온 데이터가 가장 먼저 나갑니다. 스택 추상 데이터 타입 (ADT) 객체: 0개 이상의 원소를 가지는 유한 선형 리스트 연산: 매개변수 s는 스택을 의미 ▪ create(size) 최대 크기가 size인 공백 스택을 생성한다. ▪ is_full(s) if(스택의 원소수 == size) return TRUE; else return FALSE; ▪ is_empty(s) if(스택의 원소수 == 0) return TRUE; else return FALSE; ▪ push(s, item) if( is_full(s) ) return ERROR_STACKFUL..
[자료구조] 스택 Stack스택(Stack) 쌓아놓은 더미, 즉 메모리가 쌓인 더미 영역을 말합니다. 스택의 특징 후입선출(LIFO:Last-In First-Out)로써 가장 최근에 들어온 데이터가 가장 먼저 나갑니다. 스택 추상 데이터 타입 (ADT) 객체: 0개 이상의 원소를 가지는 유한 선형 리스트 연산: 매개변수 s는 스택을 의미 ▪ create(size) 최대 크기가 size인 공백 스택을 생성한다. ▪ is_full(s) if(스택의 원소수 == size) return TRUE; else return FALSE; ▪ is_empty(s) if(스택의 원소수 == 0) return TRUE; else return FALSE; ▪ push(s, item) if( is_full(s) ) return ERROR_STACKFUL..
2021.04.10 -
동적 메모리 할당이란 프로그램의 실행 도중에 메모리를 할당 받는 것입니다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납합니다. 이로 인해 메모리를 효율적으로 관리하고 사용이 가능합니다. 메모리 영역은 스택(Stack :: 지역변수, 매개변수), 힙(Heap :: 동적 할당), 데이터(Data :: 전역변수, static), 코드(Code, Text :: 코드, 함수, 제어문) 으로 이루어져 있는데 동적 할당의 경우 힙 영역에 저장됩니다. main() { int *pi; pi = (int *)malloc(sizeof(int)); // 동적 메모리 할당 // ... // ... 동적 메모리 사용 // ... free(pi); // 동적 메모리 반납 } C에서 동적 메모리를 사용하는 함수로 mal..
[자료구조] 동적 메모리 할당과 반납동적 메모리 할당이란 프로그램의 실행 도중에 메모리를 할당 받는 것입니다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납합니다. 이로 인해 메모리를 효율적으로 관리하고 사용이 가능합니다. 메모리 영역은 스택(Stack :: 지역변수, 매개변수), 힙(Heap :: 동적 할당), 데이터(Data :: 전역변수, static), 코드(Code, Text :: 코드, 함수, 제어문) 으로 이루어져 있는데 동적 할당의 경우 힙 영역에 저장됩니다. main() { int *pi; pi = (int *)malloc(sizeof(int)); // 동적 메모리 할당 // ... // ... 동적 메모리 사용 // ... free(pi); // 동적 메모리 반납 } C에서 동적 메모리를 사용하는 함수로 mal..
2021.04.10 -
배열을 이용하여 행렬(matrix)을 표현하는 2가지 방법이 있습니다. (1) 2차원 배열을 이용하여 배열의 전체 요소를 저장하는 방법 (2) 0이 아닌 요소들만 저장하는 방법 (1) 2차원 배열을 이용하여 배열의 전체 요소를 저장하는 방법 이 방법의 장점은 행렬의 연산들을 간단하게 구현할 수 있다는 점이 있으며, 단점은 희소 행렬의 경우 너무 많은 메모리 공간을 낭비한다는 점이 있습니다. #include #define ROWS 3 #define COLS 3 // 행렬 전치 void matrix_transpose(int A[ROWS][COLS], int B[ROWS][COLS]) { for (int r = 0; r
[자료구조] 배열을 이용한 다항식 표현2 : 행렬배열을 이용하여 행렬(matrix)을 표현하는 2가지 방법이 있습니다. (1) 2차원 배열을 이용하여 배열의 전체 요소를 저장하는 방법 (2) 0이 아닌 요소들만 저장하는 방법 (1) 2차원 배열을 이용하여 배열의 전체 요소를 저장하는 방법 이 방법의 장점은 행렬의 연산들을 간단하게 구현할 수 있다는 점이 있으며, 단점은 희소 행렬의 경우 너무 많은 메모리 공간을 낭비한다는 점이 있습니다. #include #define ROWS 3 #define COLS 3 // 행렬 전치 void matrix_transpose(int A[ROWS][COLS], int B[ROWS][COLS]) { for (int r = 0; r
2021.04.10 -
함수의 매개변수로 포인터 전달 포인터는 다른 변수의 주소를 값으로 가지는 변수입니다. 포인터의 연산자 *(asterisk)는 포인터가 가리키는 값을 의미합니다. 즉, int *a = &b 로 선언했을 때 포인터 변수a는 변수b의 주소를 값으로 가지며 *a는 변수 b가 가진 값을 가리키는 것입니다. 이것을 다른 말로 'dereferncing' 한다고 말합니다. 포인터를 이야기하면 항상 나오는 개념이 배열입니다. 포인터는 배열과 매우 비슷합니다. 배열 int a[4] 를 선언했다고 합시다. 우리가 배열에 들어있는 특정 인덱스의 값에 접근하려면 a[0] = 2, a[2] = 30 등 이러한 방식으로 사용합니다. 이것은 포인터에서 *a = 2, *a = 30 과 유사합니다. 지정 영역에는 차이가 있지만 둘 다 ..
[자료구조] 함수의 매개변수로 포인터 전달함수의 매개변수로 포인터 전달 포인터는 다른 변수의 주소를 값으로 가지는 변수입니다. 포인터의 연산자 *(asterisk)는 포인터가 가리키는 값을 의미합니다. 즉, int *a = &b 로 선언했을 때 포인터 변수a는 변수b의 주소를 값으로 가지며 *a는 변수 b가 가진 값을 가리키는 것입니다. 이것을 다른 말로 'dereferncing' 한다고 말합니다. 포인터를 이야기하면 항상 나오는 개념이 배열입니다. 포인터는 배열과 매우 비슷합니다. 배열 int a[4] 를 선언했다고 합시다. 우리가 배열에 들어있는 특정 인덱스의 값에 접근하려면 a[0] = 2, a[2] = 30 등 이러한 방식으로 사용합니다. 이것은 포인터에서 *a = 2, *a = 30 과 유사합니다. 지정 영역에는 차이가 있지만 둘 다 ..
2021.04.10 -
리눅스 기본 명령어 리눅스 기본 명령어 사용방법에 관한 문제들입니다. (1) 루트 디렉터리 (/) 아래의 디렉터리 구조를 cd, pwd, ls 명령어를 이용해 탐색해보자 1-1. 루트 아래의 구조를 탐색하여 두 단계 정도를 트리 모양으로 그리시오. (2) 자신이 그린 트리에서 임의의 파일 혹은 디렉터리를 지정했을 때 그 절대경로명과 상대경로명을 적어보자 2-1. ced계정의 홈 디렉터리로 갈 수 있는 절대 경로와 상대 경로를 입력하시오 >> cd /home/ced >> cd ../../home/ced 2-2. root 디렉터리안의 snap - core18 - 1988 안에 있는 디렉터리들에 접근하기 위한 절대 경로와 상대 경로를 입력하시오 >> cd /snap/core18/1988 >> ../../sna..
[시스템 프로그래밍] 리눅스 기본 명령어 & 관련 문제리눅스 기본 명령어 리눅스 기본 명령어 사용방법에 관한 문제들입니다. (1) 루트 디렉터리 (/) 아래의 디렉터리 구조를 cd, pwd, ls 명령어를 이용해 탐색해보자 1-1. 루트 아래의 구조를 탐색하여 두 단계 정도를 트리 모양으로 그리시오. (2) 자신이 그린 트리에서 임의의 파일 혹은 디렉터리를 지정했을 때 그 절대경로명과 상대경로명을 적어보자 2-1. ced계정의 홈 디렉터리로 갈 수 있는 절대 경로와 상대 경로를 입력하시오 >> cd /home/ced >> cd ../../home/ced 2-2. root 디렉터리안의 snap - core18 - 1988 안에 있는 디렉터리들에 접근하기 위한 절대 경로와 상대 경로를 입력하시오 >> cd /snap/core18/1988 >> ../../sna..
2021.03.25 -
가상머신 사용자 계정 생성과 삭제 VMware Ubuntu 18.04 버전의 가상머신에서 작업한 내용입니다. 리눅스 명령어를 사용하여 사용자 계정을 생성하고 삭제하는 방법, 사용자 계정의 암호를 변경하는 방법을 알아보겠습니다. 01. 두 개의 계정 추가하기 root 권한을 얻어 adduser 명령어를 통해 두 개의 계정을 생성하는 과정입니다. useradd 명령어는 계정 생성은 가능했으나 계정 진입이 안되어 adduser 명령어를 사용하였습니다. 02. 추가한 두 개의 계정으로 각각 로그인 후 useradd, passwd, groupadd 등의 명령어 실행해보기 Root 권한 없이는 계정을 추가하거나 group을 생성하는 것이 불가능하고 현재 로그인 된 계정의 암호를 변경하는 것은 가능합니다. 03. 다..
[시스템 프로그래밍] 가상머신 사용자 계정 생성과 삭제 및 암호 변경가상머신 사용자 계정 생성과 삭제 VMware Ubuntu 18.04 버전의 가상머신에서 작업한 내용입니다. 리눅스 명령어를 사용하여 사용자 계정을 생성하고 삭제하는 방법, 사용자 계정의 암호를 변경하는 방법을 알아보겠습니다. 01. 두 개의 계정 추가하기 root 권한을 얻어 adduser 명령어를 통해 두 개의 계정을 생성하는 과정입니다. useradd 명령어는 계정 생성은 가능했으나 계정 진입이 안되어 adduser 명령어를 사용하였습니다. 02. 추가한 두 개의 계정으로 각각 로그인 후 useradd, passwd, groupadd 등의 명령어 실행해보기 Root 권한 없이는 계정을 추가하거나 group을 생성하는 것이 불가능하고 현재 로그인 된 계정의 암호를 변경하는 것은 가능합니다. 03. 다..
2021.03.23