数据结构实验三之顺序栈
#include
#include
#define MAXSIZE 100
typedef int DataType;
typedef struct stack
{
DataType data[MAXSIZE];
int top;
}sqstack;
sqstack *InitStack(sqstack *S)//顺序栈的初始化
{
S->top=-1;
return S;
}
void push(sqstack *S,DataType x)//顺序栈的元素入栈{
if(S->top>MAXSIZE-1)
printf("error!");
else
S->top++;
S->data[S->top]=x;
}
DataType pop(sqstack *S)//顺序栈的元素出栈
{
int x;
if(S->top==-1)
printf("Underflow!");
else
{
x=S->data[S->top];
printf("出栈的值为:%5d\n",S->data[S->top]);
S->top--;
}
return x;
}
DataType GetTop(sqstack *S)//顺序栈取顶元素
{
if(S->top==-1)
{
printf("Underflow!\n");
return 0;
}
else
return S->data[S->top];
}
int Empty(sqstack *S)//顺序栈的判空
{
if(S->top==-1)
return 1;
else return 0;
}
void Digit_conversion(sqstack *S)
{
int x,y,data[MAXSIZE],c,count=0;
InitStack(S);
printf("请输入一个十进制数,在输入一个其他进制数:\n");
scanf("%d%d",&x,&y);
printf("将%d的十进制数将其转化为%d进制数:\n",x,y);
while(x)
{
push(S,x%y);
x=x/y;
}
while(!Empty(S))
{
data[count]=pop(S);
count ++;
c=count;
}
printf("转换后的结果为:\t");
for(count=0;count { if(data[count]>9) printf("%c",data[count]+'A'-10); else printf("%d\t",data[count]); } printf("%\n"); } void menu() { printf("********************************* *******\n"); printf("******* 0 退出 *******\n"); printf("******* 1 顺序栈的初始化 *******\n"); printf("******* 2 顺序栈的入栈 *******\n"); printf("******* 3 顺序栈的出栈 *******\n"); printf("******* 4 获取顺序栈的顶元素 *******\n"); printf("******* 5 顺序栈的的判空 *******\n"); printf("******* 6 利用顺序栈将十进制 *******\n"); printf("******* 转换为其他进制数 *******\n"); printf("*****************************************\n"); } int main() { sqstack *L,*Sqstack; int flag=1,number1,number2,data,a; char ch,ch1; L=(sqstack *)malloc(sizeof(sqstack)); menu(); while(flag) { do { printf("请输入一个0~7的数:..."); scanf("%d",&number1); ch=getchar(); if(number1<0||number1>7) printf("输入有误,请重新输入!\n"); }while(number1<0||number1>7); switch(number1) { case 0: { flag=0; break; } case 1: { Sqstack=InitStack(L); break; } case 2: { printf("你确定要输入入栈的数据?如果要输入请输入y/Y:\n"); ch1=getchar(); while(ch1=='y'||ch1=='Y') { printf("输入你要入栈的数据:\n"); scanf("%d",&data); fflush(stdin); push(Sqstack,data); printf("你还要输入入栈的数据?如果要输入请输入y/Y:\n"); ch1=getchar(); } break; } case 3: { pop(Sqstack); break; } case 4: { number2=GetTop(Sqstack); printf("输入取出的栈顶元素:\n"); printf("其值为:%5d\n",number2); break; } case 5: { a=Empty(Sqstack); if(a==1) printf("顺序栈为空!\n"); else printf("顺序栈不为空!\n"); break; } case 6: { Digit_conversion(Sqstack); break; } } } return 0; } (注:可编辑下载,若有不当之处,请指正,谢谢!)