파일명 : 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.c

1.c

2.c

3.c

4.c

android_dynamic_array.c

flexible_array.c



Posted by 밍쫑
,