스택을 활용한 인원관리 프로그램
2022. 8. 22. 21:49ㆍ자료구조
728x90
#include <stdio.h>
#include <stdlib.h>
#define EMPTY 0
typedef struct node {
int data;
struct node* link;
}Stack;
Stack* GetNode()
{
Stack* tmp;
tmp = (Stack*)malloc(sizeof(Stack));
tmp->link = EMPTY;
return tmp;
}
void Push(Stack** top, int data)
{
Stack* tmp;
tmp = *top;
*top = GetNode();
(*top)->data = data;
(*top)->link = tmp;
}
void Pop(Stack** top) {
if (*top == EMPTY) {
return;
}
printf("%d", (*top)->data);
Stack* tmp;
tmp = *top;
(*top) = (*top)->link;
free(tmp);
}
int main()
{
Stack* top = EMPTY;
Push(&top, 10);
Push(&top, 20);
Push(&top, 30);
Pop(&top);
Pop(&top);
Pop(&top);
return 0;
}
문자열을 복사하렴녀 strcpy 함수를 사용해야함!!
strcpy의 활용법!
->
<string.h> 헤더파일 추가
strcpy(문자열을 저장할 공간, 복사할 문자열);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define EMPTY 0
typedef struct node {
char name[20];
int age;
struct node* link;
}Stack;
Stack* GetNode() {
Stack* tmp;
tmp = (Stack*)malloc(sizeof(Stack));
tmp->link = EMPTY;
return tmp;
}
void Push(Stack** top, Stack data) {
Stack* tmp;
tmp = *top;
*top = GetNode();
strcpy((*top)->name, data.name);
(*top)->age = data.age;
(*top)->link = tmp;
}
void Pop(Stack** top) {
if (*top == EMPTY) {
printf("Stack is Empty!!\n");
return;
}
Stack* tmp;
tmp = *top;
(*top) = (*top)->link;
printf("삭제\n");
free(tmp);
}
void Print(Stack** top) {
Stack* tmp;
tmp = *top;
int cnt = 1;
printf("번호\t이름\t나이\n");
while (tmp) { // 0의 값은 false로 해석
printf("%3d\t%s\t%3d\n",cnt++,tmp->name,tmp->age);
tmp = tmp->link;
}
}
int main()
{
Stack* top = EMPTY;
int sel = 0;
Stack data;
while (sel != 4) {
printf("1. 입력\n");
printf("2. 삭제\n");
printf("3. 출력\n");
printf("4. 종료\n");
printf("번호 입력 >> ");
scanf("%d", &sel);
switch (sel) {
case 1:
pritf("이름입력: ");
scanf("%s", data.name);
//이름 입력
scanf("%d", data.age);
//나이 입력
Push(&top, data);
//Push 함수 호출
system("pause");
break;
case 2:
//Pop 함수 호출
Pop(&top);
system("pause");
break;
case 3:
Print(&top);
//Print 함수 호출
system("pause");
break;
case 4:
while (top) {
Pop(&top);
}
//Pop 함수 호출
break;
default:
printf("1 ~ 4 중 하나를 입력해주세요.\n");
system("pause");
}
system("cls");
}
return 0;
}
이상입니다!
728x90