注册 登录
编程论坛 C语言论坛

出入栈问题,大佬求解!

牵绊绊 发布于 2020-03-29 12:04, 1497 次点击
为什么进行插入时输入插入的元素之后就结束了,程序为什么不能往下进行??
#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();
}
3 回复
#2
lin51616782020-03-29 12:33
插入函数没问题 你插入之后做了什么操作
#3
牵绊绊2020-03-29 13:29
回复 2楼 lin5161678
输入元素之后点击了Enter键,然后就结束了
#4
牵绊绊2020-03-29 15:18
#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("666");
    printf("%d\n",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=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=(ZhanL)malloc(sizeof(zhan));
    switch(a)
    {
    case 1:L=InitStack();   break;
    case 2:
           printf("请输入要插入的元素\n");
           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();
}
修改了一下,但是插入的元素数不出来
1