이번 2009 자료구조 중간고사 문제중에 하나...
5개의 구조체 배열에 학번, 이름을 넣을 수 있는 앞뒤의 Stack 구조이다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct e{
int num;
char name[25];
};
void stack_add(int *t1,int *t2,struct e* p);
void stack_print(int *t1,int *t2,struct e* p);
int stack_del(int *t1,int *t2);
void main()
{
int top1,top2,m=0,num=-1;
struct e ele[5];
top1=-1;
top2=5;
while(1)
{
printf("\n------------------\n");
printf(" Menu \n");
printf("------------------\n");
printf(" 1. insert \n");
printf(" 2. delete \n");
printf(" 3. print \n");
printf(" 4. exit \n");
printf(" Select menu: ");
scanf("%d",&m);
switch(m)
{
case 1:
stack_add(&top1,&top2,ele);
break;
case 2:
num=stack_del(&top1,&top2);
if(num!=-1)
{
printf("----------------------\n");
printf(" !!!Delete Success!!! \n");
printf("----------------------\n");
printf(" Delete Room : %d \n",num);
printf(" Id number : %d \n",ele[num].num);
printf(" Name : %s \n",ele[num].name);
}
break;
case 3:
stack_print(&top1,&top2,ele);
break;
case 4:
exit(1);
break;
}
}
}
void stack_add(int *t,int *t2,struct e* p)
{
int a,b;
char name[25];
if((*t)!=(*t2))
{
printf("\n Where is stack?(1(front) or 2(near) other is Error! ");
scanf("%d",&a);
if(a==1)
{
printf(" Student Id Number :");
scanf("%d",&b);
printf(" Student Name :");
scanf("%s",name);
(*t)++;
p[*t].num=b;
strcpy(p[*t].name,name);
}
else if(a==2)
{
printf(" Student Id Number :");
scanf("%d",&b);
printf(" Student Name :");
scanf("%s",name);
(*t2)--;
p[*t2].num=b;
strcpy(p[*t2].name,name);
}
else
printf("\nStack Number is wrong!!\n");
}
else
{
printf("\n Stack Full!!! \n");
}
}
void stack_print(int *t1,int *t2,struct e* p)
{
int a,i;
if(*t1!=-1 || *t2!=5)
{
printf("\n Where is stack?(1(front) or 2(near) other is Error! ");
scanf("%d",&a);
if(a==1)
{
if(*t1==-1)
{
printf("\nData is Empty !!\n");
}
else
{
printf("\nFirst Stack values \n");
printf("-------------------\n");
for(i=0;i<=*t1;i++)
{
printf(" %d th Room \n",i);
printf(" Id number : %d\n",p[i].num);
printf(" Name : %s\n",p[i].name);
printf("------------------\n");
}
}
}
else if(a==2)
{
if(*t2==5)
{
printf("\nData is Empty !!\n");
}
else
{
printf("\nSecond Stack values \n");
printf("-------------------\n");
for(i=4;i>=*t2;i--)
{
printf(" %d th Room \n",i);
printf(" Id number : %d\n",p[i].num);
printf(" Name : %s\n",p[i].name);
printf("------------------\n");
}
}
}
else printf("\nStack Number is wrong!!\n");
}
else printf("\n List View Error!!! Data is Empty ! \n");
}
int stack_del(int *t1,int *t2)
{
int a,num=-1;
if(*t1!=-1 || *t2!=5)
{
printf("\n Where is stack?(1(front) or 2(near) other is Error! ");
scanf("%d",&a);
if(a==1)
{
if(*t1==-1)
{
printf("\n Delete Error!!! Data Empty !!\n");
}
else
{
num=*t1;
(*t1)--;
}
}
else if(a==2)
{
if(*t2==5)
{
printf("\n Delete Error!!! Data Empty !!\n");
}
else
{
num=*t2;
(*t2)++;
}
}
else printf("\nStack Number is wrong!!\n");
}
else printf("\n Delete Error!!! Data Empty !!\n");
return num;
}