Stack은 컴파일러가 코드에 따라 메모리를 정적할당해주는 영역으로 stack frame으로 Base pointer와 stack pointer을 왔다갔다하며 메모리를 효율적으로 사용한다. 이에반해 Heap란 영역은 프로그램이 실행 중에 메모리를 동적으로 할당할 할 수 있도록 하는 메모리 영역이다. 동적할당을 배우기 전에는 배열로써 한계였던 코드가 동적할당으로 계속 프로그램실행 중 메모리가 필요할때 메모리를 할당해서 사용할 수 있으니 좋았다. 아래는 연결리스트, 노드를 사용하여 동적할당된 메모리의 주소를 잃어버려서 다시 사용 못할 수 있는 상황을 이겨냈다. 나중에는 사용자가 찾고싶은 이름으로 전화번호를 찾을 수 있는 코드를 짜봐야겠다.
#include <stdio.h>
#include <malloc.h>
#pragma warning(disable:4996)
//#define MAX_PERSON 5
typedef struct PEOPLE{
char name[14];
int age = 0;
float hight = 0;
float weight = 0;
PEOPLE* p_next = NULL;
};
void AddPerson(PEOPLE** pp_head, PEOPLE**pp_tail)
{
if (NULL != *pp_head) {
(*pp_tail)->p_next = (PEOPLE*)malloc(sizeof(PEOPLE));
*pp_tail = (*pp_tail)->p_next; //새로 만든 노드의 주소값을 p에 저장
}
else {
*pp_head = (PEOPLE*)malloc(sizeof(PEOPLE));
*pp_tail = *pp_head; //새로만든 노드의 주소값을 p에 저장
}
/*p = (PERSON*)malloc(sizeof(PERSON));*/
printf("name : ");
scanf("%s", &(*pp_tail)->name);
printf("age : ");
scanf("%d", &(*pp_tail)->age);
printf("hight : ");
scanf("%f", &(*pp_tail)->hight);
printf("weight : ");
scanf("%f", &(*pp_tail)->weight);
(*pp_tail)->p_next = NULL; // 다음 노드가 없음을 명시
}
void ShowPerson(PEOPLE** pp_head)
{
int count = 0;
PEOPLE** pp = pp_head;
if ((*pp_head) == NULL) printf("Add ur friend\n");
else {
while ((*pp) != NULL) {
printf("%dth\n", count + 1);
printf("name : %s\n", (*pp)->name);
printf("age : %d\n", (*pp)->age);
printf("hight : %f\n", (*pp)->hight);
printf("weight : %f\n ", (*pp)->weight);
*pp = (*pp)->p_next;
count++;
}
}
}
void DeleteNode(PEOPLE*p_head, PEOPLE*p_tail)
{
PEOPLE* p = p_head, * p_save_next;
while (NULL != p) {
p_save_next = p->p_next;
free(p);
p = p_save_next;
}
p_head = p_tail = NULL;
}
void main()
{
PEOPLE* p_head = NULL,*p_tail = NULL;
int count = 1;
while (count != 3) {
printf("CONTACT\n");
printf("1. Add\n");
printf("2. Show who you added\n");
printf("3. end\n");
printf("num : ");
scanf("%d", &count);
if (count == 1)AddPerson(&p_head, &p_tail);
else if (count == 2)ShowPerson(&p_head);
else DeleteNode(p_head, p_tail);
}
/*free();*/
}
'C, C++' 카테고리의 다른 글
다형성(Polymorphism) (0) | 2020.08.25 |
---|---|
오버라이딩(Over riding) (0) | 2020.08.24 |
레이달리오 올웨더포트폴리오(2) (0) | 2020.08.23 |
레이달리오 올웨더포트폴리오(1) (0) | 2020.08.23 |
도서대여프로그램 with C (0) | 2020.08.21 |
댓글