数据结构实验三之顺序栈

数据结构实验三之顺序栈
数据结构实验三之顺序栈

#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;

}

(注:可编辑下载,若有不当之处,请指正,谢谢!)

相关主题
相关文档
最新文档