Language/자료구조2021. 11. 22. 17:13[6] C review < 전화번호부 알고리즘 version3.0 >

동작 방식 : 앞서 했던 알고리즘은 배열의 크기를 미리 할당한 후 사용하였습니다. 만약 배열의 크기가 더 커질 필요가 있을때 이 알고리즘은 제대로 동작하지 못합니다. 즉, 배열을 미리 선언할때 동적할당을 하여 선언합니다. 또한 명령어,이름,번호 3가지 모두 한줄에 입력하여 사용할 수 있게 수정합니다. 생각해야될 점 2가지 ! 1. 어떻게 동적할당 할 것인가 ? > malloc을 사용합니다. 2. 명령어 이름 번호를 어떻게 한줄에 입력하여 사용할 것인가 즉, 어떻게 구분 할 것인가 ? > 명령어 (공백) 이름 (공백) 번호 식으로 공백으로 각 명령어와 입력 인자를 구분합니다. #include #include #include #include #define CAPACITY 100 #define BUFFER_S..

[5] C review < 전화번호부 알고리즘 version2.0 >
Language/자료구조2021. 11. 22. 10:54[5] C review < 전화번호부 알고리즘 version2.0 >

동작 방식 : 파일을 로드하고 저장하는 기능을 추가하며, 정렬이 알파벳 순으로 되도록 추가합니다. 생각해야 할점 3가지! 1. 어떻게 알파벳 순서로 add 할 것인가 ? 알파벳 순의 add는 version1.0과 가장 큰 차이점 입니다. 위와 같이 index i를 이용해 해당 칸에 존재하는 값과 새로 들어오는 값을 비교하여 추가합니다. 2. 특정 값을 삭제할때 어떻게 삭제할 것인가 ? version 1.0에서는 맨 뒤에 값을 삭제할 값에 넣어 해결하였지만 이렇게 하면 애쓴 알파벳 정렬이 깨질 위험이 커집니다. 즉 삭제할 값 뒤쪽에 존재하는 배열을 한 칸씩 왼쪽으로 당겨야 합니다. 3. 어떻게 파일을 load하고 save할 것인가 ? 앞에서 했던 file 입출력 프로그램을 기억합니다. #include #i..

[4] C review < 전화번호부 알고리즘 version1.0 >
Language/자료구조2021. 11. 22. 10:02[4] C review < 전화번호부 알고리즘 version1.0 >

동작 방식 : 명령어 입력받고 각 기능에 해당되는 값들을 추가로 받는다. 생각해야 될점 2가지! 1. names와 numbers배열을 어떻게 처리할 것인가 ? 위와 같이 names와 numbers배열은 각각의 칸에 이름과 전화번호가 남긴 배열이 들어가야 한다. 즉, names numbers의 배열의 타입이 일반적인 char형이 아니라 cahr* 형이 되어야한다. 2. names와 numbers배열에 키보드에서 입력받은 이름과 전화번호를 넣을때 strdup를 쓰는 이유 ? buffer 배열들은 함수내에서 선언된 것들이기 때문에 함수가 종료 된후 모두 사라진다. 즉, 키보드로 입력받은 이름과 전화번호들이 소멸되기 때문에 제대로 저장할 수 없다. 이는 strdup함수를 쓰면서 해결할 수 있는데 이는 buffe..

[3] C review < 문자열 응용>
Language/자료구조2021. 11. 16. 11:42[3] C review < 문자열 응용>

문제 1. #define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { char buffer[40]; while (1) { printf("$ "); //scanf("%s", buffer); // scanf는 공백 기준으로 나누므로 우리가 원하는 게 아니다. fgets(buffer,10,stdin); // gets는 라인별로 입력받는다. but 코드가 안정하지 않다. printf("%s:%d\n", buffer, strlen(buffer)); } return 0; } ============================= $ adfdfas adfdfas :8 위의 코드의 출력값을 보면 adfdfas : 8이 위 아래로 띄어쓰기 되어 있는데 이는 우리..

[2] C review < 문자열 >
Language/자료구조2021. 11. 15. 21:32[2] C review < 문자열 >

문자열은 char타입의 배열의 각 칸마다 문자 하나씩 저장되는 형식입니다. C언어는 문자열을 생성하는 편리한 방법을 제공합니다. literal이라는 말은 일반적으로 수정이 불가능하다고 생각하면 됩니다. C언어에서 string.h라이브러리는 문자열을 다루는 다양한 함수를 제공합니다. #include #include int main() { char word[10]; word[0] = 'h'; word[1] = 'e'; word[2] = 'l'; word[3] = 'l'; word[4] = 'o'; //word[5] = '\0'; printf("% s", word); return 0; } ====================================== hello儆儆儆儆儆?虧V綜[ 앞에서 봤드이 마지막 문..

[1] C review < 동적메모리 할당 >
Language/자료구조2021. 11. 15. 19:49[1] C review < 동적메모리 할당 >

변수를 선언하는 대신 프로그램의 요청으로 메모리를 할당할 수 있다. 이것을 동적 메모리 할당이라고 부릅니다. malloc 함수를 호출하여 동적메모리할당을 요청하면 요구하는 크기의 메모리를 할당하고 그 시작 주소를 반환합니다. malloc함수의 리턴값이 주소값이므로 당연히 포인터 변수를 사용해야 합니다. 동적으로 할당된 배열은 공간이 부족할 경우 더 큰 배열을 할당하여 사용할 수 있습니다. 엄밀히 말하면 배열의 크기를 확장할 수 없습니다. 더큰 배열을 새롭게 만들어서 대체하는 방식으로 접근해야 합니다. 배열의 확장을 코드로 살펴봅시다. #include #include int main(void) { int* array = (int*)malloc(4 * sizeof(int)); array[0] = 1; arr..

[0] C review  < 포인터,배열,포인터 연산 >
Language/자료구조2021. 11. 15. 17:34[0] C review < 포인터,배열,포인터 연산 >

C언어를 리뷰하기전 다음 3가지를 알면 c언어를 이해하는데 큰 도움이 됩니다. - 컴퓨터의 메모리는 데이터를 보관하는 장소 - 바이트(8bits)단위로 주소가 지정됨 - 모든 변수는 주소를 가짐 예를들어 정수는 4바이트를 할당되고, 메모리의 4바이트 공간에 sum변수가 할당됩니다. 이때 가장 앞의 번지가 그 변수의 주소가 됩니다. 포인터는 메모리 주소를 값으로 가지는 변수이고, 포인터 변수는 다음과 같이 선언됩니다. type-name * variable-name variable-name은 선언된 포인터 변수의 이름이며, *는 variable-name이 포인터 변수임을 표시하고, type-name은 포인터 변수 variable-name에 저장될 주소에 저장될 데이터의 유형을 지정합니다. ex) int * ..

image