본문 바로가기

분류 전체보기837

연결리스트2 연결의 형태가 한쪽 방향으로 전개되고 시작과 끝이 분명히 존재하는 '단순 연결 리스트'이다. 정렬 기능이 추가된 연결리스트의 ADT정의 기능적으로 무엇인가를 변경하거나 추가하지 않는다면 ADT를 변경할 이유는 없다. 그래서 앞서 배열리스트에 정의한 리스트ADT를 그대로 적용해도된다. 하지만 연결리스트에 정렬 관련 기능을 추가하기 위해서 ADT를 조금확장한다. 정렬 기능이 추가된 리스트 자료구조의 ADT void ListInit(List *plist); -초기화할 리스트의 주소 값을 인자로 전달한다. -리스트 생성 후 제일 먼저 호출되어야 하는 함수이다. void LInsert(List *plist, LData data); -리스트에 데이터를 저장한다. 매개변수 data에 전달된 값을 저장한다. int L.. 2021. 2. 13.
링크드리스트1 연결 기반의 리스트 간단히 연결 리스트라고 불리는 리스트의 구현을 이해하기 위해서는 malloc와 free함수를 기반으로 하는 메모리의 동적할당에 대한 완전한 이해가 되어야 한다. #include int main() { int arr[10]; int readCount =0; int readData; int i; while(1) { printf("자연수 입력 : "); scanf("%d", &readData); if(readDatanext = newNode; tail = newNode; } printf("\n"); //입력 받은 데이터의 출력과정 printf("입력 받은 데이터의 전체 출력\n); if(head ==NULL) { printf("저장된 자연수가 존재하지 않습니다.\n"); } else { c.. 2021. 2. 12.
매크로와 선행처리기(Preprocessor) 선행처리는 컴파일 이전의 처리를 의미한다. 선행처리는 선행처리기에 의해서 처리되고, 컴파일은 컴파일러에 의해서, 링크는 링커에 의해서 진행이 된다. 컴파일 이전에 선행처리의 과정을 거친다는 점에 주목해야 한다. 선행처리기가 하는 일은 단순한다. 우리가 삽입한 선행처리명령문대로 소스코드의 일부를 수정한다. 여기서 말하는 수정이란 단순 치환(substitution)의 형태를 띠는 경우가 대부분이다. #define PI 3.14 위의 문장은 PI를 3.14로 치환해라 라는 뜻이다 . 즉 선행처리 명령문은 # 문자로 시작을 한다. 컴파일러가 아닌 선행처리기에 의해서 처리되는 문장이고, 명령문의 뒤에 세미콜론을 붙이지 않는다. #define : Object- like - macro #define 지시자 PI 매크.. 2021. 2. 12.
C언어 함수들1 #include int _getch(void) 문자 입력하기 int _putch(int ch); 문자 출력하기 #includ int _stricmp(const char *s1, const char *s2); 문자열을 비교하는데 대, 소문자 구분을 안함 char *strstr(const char *string, const char * strCharSet); string은 검색될 문자열 , strCharSet은 검색할 문자 또는 문자열 검색 성공시 검색 위치의 포인터 값(번지) 반환 실패시 NULL반환 char * strchr(const char *satring, int c); string은 검색될 문자열, c는 검색할 문자 찾으면 그 위치의 메모리 번지 값 반환, 찾지 못하면 NULL반환 ret(검색된 번.. 2021. 2. 11.
메모리 관리와 동적할당 프로그램을 실행하면 해당 프로그램의 실행을 위한 메모리 공간이 운영체제에 의해서 미리 마련이 된다 . 그리고 이 메모리 공간 내에서 변수가 선언되고, 문자열이 선언된다. 메모리의 구성을 살펴보면 네가지 영역으로 구분된다. 코드 영역(Code Area) 코드 영역은 이름 그대로 실행할 프로그램의 코드가 저장되는 메모리 공간이다. 따라서 CPU는 코드영역에 저장된 명령문들을 하나씩 가져가서 실행을 한다. 데이터 영역(Data Area) 데이터 영역에는 전역변수가 static으로 선언되는 static변수가 할당된다. 즉 이영역에 할당되는 변수들은 프로그램의 시작과 동시에 메모리 공간에 할당되어 프로그램 종료 시 까지 남아있게 된다는 특징이 있다. 스택 영역(Stack Area) 스택 영역에는 지역변수와 매개변.. 2021. 2. 10.
배열 기반의 리스트(List)2 전의 예제를 토대로 리스트를 구현하자 . LCount는 별도의 설명이 필요없다. //ArrayList.c #include #include "ArrayList.h" //리스트의 초기화 void ListInit(List *plist) { (plist -> numOfData) = 0; //저장된 데이터의 수 (plist -> curPosition) = -1; //참조되는 위치(배열인덱스값) } //데이터의 삽입 void LInsert(List * plist, LData data) { if(plist ->numOfData >= LIST_LEN) //저장된 데이터 수가 배열의 길이를 넘으면 { puts("저장이 불가능합니다."); return; } plist->arr[plist ->numOfData] =data;.. 2021. 2. 9.