파일명 : 1.c
파일명 : 0.c
파일명 : 4.c
파일명 : flexible_array.c
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int age; char *name; //메모리에 낭비되지 않게 힙에다가 만듭신다. } PERSON; //힙에 만듭시다. void main() { int age; char name[32]; PERSON *p; printf("input name: "); scanf("%s", name); printf("input age: "); scanf("%d", age); p = (PERSON*)malloc(sizeof(PERSON)); p->age = age; p->name=(char*)malloc(strlen(name)+1); //strlen은 null을 포함하지않으니까 +1해준다. strcpy(p->name, name); printf("name: %s, age: %d\n", p->name, p->age); free(p->name); free(p); }
ppt 8쪽
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int age; char name[1]; //개발자의 편법! 1글자도 아니고 null만 들어가는데? } PERSON; //힙에 만듭시다. void main() { int age; char name[32]; PERSON *p; printf("input name: "); scanf("%s", name); printf("input age: "); scanf("%d", age); p = (PERSON*)malloc(sizeof(PERSON)+ sizeof(char)*strlen(name)); //위에서 말한 개발자의 편법! p->age = age; p->name=(char*)malloc(strlen(name)+1); //strlen은 null을 포함하지않으니까 +1해준다. strcpy(p->name, name); printf("name: %s, age: %d\n", p->name, p->age); free(p->name); free(p); }
- int arr[0]; //배열의 길이는 0을 설정할 수 없다.
- typedef struct{
int arr[0];
} TYPE;
void main() {
TYPE type;
printf("%d\n", sizeof(type)); //4가 출력된다. 포인터의 타입에 따른..
}
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int age; // 99년도에 표준 되었다. C99 char name[]; //char name[0]; //->flexible array member //사이즈가 안 잡혀있는데 도대체 무슨 역할을하는걸까?(ppt10~11쪽) } PERSON; //반드시 flexible array member는 구조체의마지막에 와야한다. void main() { // printf("%d\n", sizeof(PERSON)); //4가 나옴. int age; char name[32]; PERSON *p; printf("input name: "); scanf("%s", name); printf("input age: "); scanf("%d", age); p = (PERSON*)malloc(sizeof(PERSON)+ sizeof(char)*strlen(name) + 1);
//null값 포함하기 위해서 +1 그럼 런타임 에러 안남. p->age = age; p->name=(char*)malloc(strlen(name)+1); strcpy(p->name, name); printf("name: %s, age: %d\n", p->name, p->>age); free(p->name); free(p); }
파일명 ; 3.c
#include <stdio.h> #include <stdlib.h> //for systme() #define Q_MAX (5) int queue[Q_MAX]; int front, rear; void put(int data) { queue[rear] = data; rear++; } int get() { int t = queue[front]; front++; return t; } void display(){ int i; system("cls"); printf("%*s\n", (rear+1)*4, "rear"); printf("%*s\n", (rear+1)*4, " | "); for(i=0; i<Q_MAX; i++){ printf("[%2d]", queue[i]); } printf("\n"); printf("%*s\n", (front+1)*4, " | "); printf("%*s\n", (front+1)*4, "front"); getchar(); } void main() { int i; display(); for(i=0;i<6;i++){ put(i+1); display(); } for(i=0;i<6;i++){ get(); display(); } }
큐가 비어 있는 경우 : front == rear
큐가 가득 차 있는 경우 : front == rear
->큐가 가득 차 있는 경우와 비어 있는 경우를 구분할 수가 없다.
//큐는 full과 empty를 구분하기 힘들다는 단점이 있다. #include <stdio.h> #include <stdlib.h> //for systme() #define Q_MAX (5) int queue[Q_MAX]; int front, rear; void put(int data) { queue[rear] = data; //if(rear != Q_MAX) // rear++; //else // rear = 0; rear = (rear+1)% Q_MAX; } int get() { int t = queue[front]; //if(front != Q_MAX) // front++; //else // front = 0; front = (front+1)% Q_MAX; } void display(){ int i; system("cls"); printf("%*s\n", (rear+1)*4, "rear"); printf("%*s\n", (rear+1)*4, " | "); for(i=0; i<Q_MAX; i++){ printf("[%2d]", queue[i]); } printf("\n"); printf("%*s\n", (front+1)*4, " | "); printf("%*s\n", (front+1)*4, "front"); getchar(); } void main() { int i; display(); for(i=0;i<6;i++){ put(i+1); display(); } for(i=0;i<6;i++){ get(); display(); } }
큐 구현!!
#include <stdio.h> #include <stdlib.h> #define Q_MAX (5) int queue[Q_MAX]; int front, rear; void put(int data) { queue[rear] = data; rear = (rear+1)% Q_MAX; } int get() { int t = queue[front]; front = (front+1)% Q_MAX; } int is_full() { return front == (rear+1) % Q_MAX; } int is_empty() { return front == rear; } void display(){ int i; system("cls"); printf("%*s\n", (rear+1)*4, "rear"); printf("%*s\n", (rear+1)*4, " | "); for(i=0; i<Q_MAX; i++){ printf("[%2d]", queue[i]); } printf("\n"); printf("%*s\n", (front+1)*4, " | "); printf("%*s\n", (front+1)*4, "front"); getchar(); } void main() { int i; display(); for(i=0;i<6;i++){ if(!is_full()) put(i+1); display(); } for(i=0;i<6;i++){ if(!is_empty()) get(); display(); } }
큐의 문제점 : 큐가 전역에 존재한다. 그러므로 하나밖에 마들 수가 없다. 2개 이상을 만들려면 배열이 필요하다.
a
a
a
a
a
'알고리즘 > 자료구조/알고리즘' 카테고리의 다른 글
[집중단기 마지막날] 자료구조 - 재귀호출, 정렬 (0) | 2014.02.14 |
---|---|
[집중단기 3일차] 자료구조 - Stack, 비트연산, Dynamic Array (0) | 2014.02.12 |
[집중단기 2일차] 자료구조 - 포인터 (0) | 2014.02.11 |
[집중단기 1일차] C언어 (0) | 2014.02.10 |