#include<stdio.h>
#include<malloc.h>
#define MAXSIEZE
typedef int DataType;
typedef struct stacknode
{
DataType data;
struct stacknode *next;
} LinkStack ;
LinkStack *InitStack()
{
LinkStack *S;
S=NULL;
return S;
}
int EmptyStack(LinkStack *S)
{
if(S==NULL)
return 1;
else
return 0;
}
LinkStack *Push(LinkStack *S,DataType x)
{
LinkStack *p;
p=(LinkStack *)malloc(sizeof(LinkStack));
p->data=x;
p->next=S;
S=p;
return S;
}
LinkStack *Pop(LinkStack *s,DataType *x)
{
LinkStack *p;
if(EmptyStack(s))
{
printf("栈空,不能出栈");
return NULL;
}
else
{
*x=s->data;
p=s;
s=s->next;
free(p);
return s;
}
}
int GetTop(LinkStack *s,DataType *x)
{
if(EmptyStack(s))
{
printf("栈空");
return 0;
}
else
{
*x=s->data;
return 1;
}
}
void ShowStack(LinkStack *s)
{
LinkStack *p=s;
if(p==NULL)
printf("\t栈空");
else
{
printf("从栈顶元素起栈中元素为; ");
while(p!=NULL)
{
printf("%d",p->data) ;
p=p->next;
}
}
}
void DB(LinkStack *s ,DataType x)
{
while(x)
{
s=Push(s,x%2);
x/=2;
}
printf("转换后的二进制数为; ");
while(!EmptyStack(s))
{
s=Pop(s,&x);
printf("%d",x);
}
}
void menu()
{
printf("\n[ 栈子系统 ]");
printf("\n=======================================");
printf("\n[ 1 初始化栈 ]");
printf("\n[ 2 入栈操作 ]");
printf("\n[ 3 出栈操作 ]");
printf("\n[ 4 求栈顶元素 ]");
printf("\n[ 5 显示栈中元素 ]");
printf("\n[ 6 十,二进制转换 ]");
printf("\n请输入菜单号(0--6)");
}
main()
{
int i,n,flag;
LinkStack *s;
DataType x;
char ch1,ch2,a;
ch1='y';
while(ch1=='y'||ch1=='Y')
{
menu();
scanf("%c",&ch2);
getchar();
switch(ch2)
{
case'1':
s=InitStack();
printf("栈的初始化完成");
break;
case'2':
printf("请输入要入栈的元素个数");
scanf("%d",&n);
printf("请输入%d个整数进行入栈",n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
s=Push(s,x);
}
printf("入栈成功");
break;
case'3':
printf("请输入要进行出栈的元素个数;");
scanf("%d",&n);
printf("出栈的元素为:");
for(i=0;i<n;i++)
{
s=Pop(s,&x);
if(s!=NULL)
printf("%5d",x);
}
break;
case'4':
if(flag=GetTop(s,&x))
printf("当前栈顶元素为%d",x);
break;
case'5':
ShowStack(s);
break;
case'6':
s=InitStack();
printf("请输入整数:");
scanf("%d",&x);
DB(s,x);
break;
case'0':
ch1='n';
break;
default:
printf("请重新输入整数(0-5)");
}
if(ch2!='0')
{
printf("\n按回车继续,任意键返回主菜单\n");
a=getchar();
if(a!='\xA')
{
getchar();
ch1='n';
}
}
}
}
出栈到最后一位时不显示
入栈3个元素1 2 3
出栈3个元素 只能看见3 2
结果难道不应该是3 2 1 吗?
再出栈一个发现栈空
怎么才能显示出栈的所有元素