出入栈问题,大佬求解!
为什么进行插入时输入插入的元素之后就结束了,程序为什么不能往下进行??#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ERROR -2
#define OK 1
typedef int Status;
typedef int SElemType;
typedef struct zhan
{
int date;
struct zhan *next;
}zhan,*ZhanL;
ZhanL InitStack()
{
ZhanL L;
L=(ZhanL)malloc(sizeof(zhan));
L->next=NULL;
return L;
}
void StackPrint(ZhanL L)
{
while(L->next)
{
printf("%d",L->date);
L=L->next;
}
}
void Push(ZhanL L,int e)
{
ZhanL p=(ZhanL)malloc(sizeof(zhan));
p->date=e;
p->next=L->next;
L->next=p;
}
int pop(ZhanL L)
{
if (L->next)
{
ZhanL s = L->next;//释放空间用
printf("%d\t",s->date);
L->next = s->next;
if (L->next)
{
// printf("%d \n",L->data);
}
else
{
printf("栈空\n");
}
free(s);
}
return 0;
}
int zhuanhuan(ZhanL L, int data, int jz)
{
while (data)
{
Push(L, data%jz);
data = data / jz;
}
while (L)
{
pop(L);
}
return 0;
}
void Translate()
{
ZhanL s;
int data, jz;
s = InitStack();
printf("请输入一个十进制数\n");
scanf("%d", &data);
printf("请输入转换的进制\n");
scanf("%d", &jz);
zhuanhuan(s, data, jz);
}
void zhixing(int a)
{
int e;
ZhanL L;
switch(a)
{
case 1:L=InitStack(); break;
case 2:
printf("请输入要插入的元素");
scanf("%d",&e);
Push(L,e); break;
case 3:Translate(); break;
case 4:StackPrint(L); break;
default: break;
}
}
int flag=1;
void main()
{
int menu;
for(;;)
{
do
{
printf("**********1.初始化栈**********\n");
printf("**********2.插入元素**********\n");
printf("**********3.数制转换**********\n");
printf("**********4.输出栈************\n");
printf("**********5.程序终止**********\n");
printf("请输入菜单项:\n");
scanf("%d",&menu);
}while(menu<1||menu>5);
zhixing(menu);
}
getchar(); getchar(); getchar();
}