c언어

자료구조(Data Structure)

C언어로 큐(Queue) 구현하기

큐(Queue) 스택은 나중에 들어온 데이터가 먼저 나가는 후입선출(last in, first out)구조였다. 큐는 먼저들어온 데이터가 먼저 나가는 선입선출(first in, first out)구조다. 뒤(rear)에서 데이터가 들어오고, 앞(front)에서 데이터가 하나씩 삭제된다. 큐를 구현해보자 일단 큐를 구현하기전에 필요한 것을 나열해보면, 1. 큐 구조체 정의, 생성 2. full인지 empty인지 확인하는 함수 3. 데이터를 삽입하는 함수 4. 데이터를 삭제하면서 반환하는 함수 5. 큐를 출력하는 함수 1. 큐 구조체 정의 생성 #include #define MAX_QUEUE 5 typedef int element; typedef struct { int front; int rear; elem..

자료구조(Data Structure)

동적 배열 스택 구현하기

앞에서는 스택의 크기를 고정시켜놓고 컴파일을 하는 1차원 배열 스택을 구현했다. 이번에는 필요에따라 메모리 공간을 할당하는 동적메모리를 활용한 스택을 구현해보자. #include #include typedef int element; typedef struct { int top; int capacity; element *data; } StackType; 일반적인 스택구현과 다른점은 element *data이다. 동적메모리를 할당할 malloc함수는 리턴값이 포인터이기 때문에, 그 포인터를 받을 포인터변수 data를 선언한다. 1.스택초기화, 동적메모리 free void init_stack(StackType *s) { s->top = -1; s->capacity = 1; s->data = (element *..

C프로그래밍/개인 공부

C언어 - 이중 포인터

이중 포인터 포인터는 다른 변수의 주소를 가르킨다고 학습했었다. 포인터도 변수이기 때문에, 포인터가 포인터를 가르킬 수 있다. 그것을, 포인터의 포인터. 즉, '이중 포인터'라고 한다. 간단한 일반적인 포인터의 예를 보자, int i = 10; int *p = &i; 이것은 지금까지 학습했던, 일반적인 포인터이다. 포인터 p는 변수 i를 가르키게 된다. 이중 포인터는 이렇게 표현한다. int i = 10; int *p = &i; int **q = &p; 포인터 p는 변수 i의 주소를 가르키고, 이중포인터 q는 포인터p의 주소를 가르킨다.(포인터 p도 변수이기 때문에 주소를 갖는다.) 텍스트로는 이해가 힘드니 그림으로 다시 알아보자. 참조연산자 * 주소연산자 & 를 활용해서 누가 어떤 값을 갖는지 확인해보..

C프로그래밍/개인 공부

C언어 - 동적 메모리

동적 메모리란? 프로그램이 메모리를 할당하는 방식에는 2가지 방법이 있다. 우리가 처음부터 써왔던 방법은 '정적 메모리 할당(static memory allocation)'이다. '정적 메모리 할당'은 미리 정해놓은 만큼의 메모리를 할당받는 것이다. 이 방법은 간편하지만 단점이있다. 공간의 낭비가 있을 수 있기 때문이다. 예를 들어서, 학생들 성적을 저장하기위해서 미리 100개의 정수를 저장할 수 있는 배열을 만들었다고 가정해보자. int scores[100] 하지만, 이 배열에 70명의 학생의 성적만이 입력된다면, 나머지 30개의 공간은 낭비되게 된다. 그렇다면 필요한 공간만 그때그때 할당받으면 메모리를 더욱 효율적으로 사용할 수 있게된다. 이것이 '동적 메모리 할당(dynamic memory allo..

C프로그래밍/개인 공부

C언어 - 열거형(enumeration)

열거형(enumeration)이란 변수가 가질 수 있는 값들을 나열해 놓은 자료형이다. 즉, 변수가 가질수 있는 상수값들을 나열해 놓은 자료형. 열거형으로 선언된 변수는 나열된 변수만 가질 수 있다. 예를 들어서, 요일을 나타내는 변수를 d라고 했을때, d는 월, 화, 수, 목, 금, 토, 일 만을 변수로 가질 수 있다. 그렇다면 열거형은 왜 쓰는가? 방금 전의 예처럼 월요일은 0, 화요일은 1, 수요일은 2 이런식으로 나타낼 수 있지만, 이렇게 하게 된다면 오류의 가능성, 가독성이 좋지않은 문제가 있다. 그렇기 때문에 MON, TUE, WED처럼 기호상수로 정의하는게 바람직하다고 볼 수 있다. 그렇다면 열거형을 한번 정의해보자. 예를 들어 요일을 나타내는 열거형을 정의해보면, 1 2 3 4 5 6 7 ..

C프로그래밍/개인 공부

C언어 - 구조체와 함수

구조체와 함수 구조체는 함수의 인수로도 사용이 가능하고 반환값으로도 사용가능하다. 구조체를 함수의 인수로 넘길때는 "값에 의한 호출"을 사용하게 된다. "값에 의한 호출" 즉, 복사를 사용하는 방법을 예제를 통해 알아보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include struct student { int num; char *name; float grade; }; int equal(struct student s1, struct student s2) { if(s1.num == s2.num){ return 1; } else{ return 0; } } int main(void) {..

Jminu
'c언어' 태그의 글 목록 (2 Page)