aouter 2016-04-23 11:01 采纳率: 0%
浏览 1438

顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行。预计主函数存在问题。

#include
#include
#define MAXSIZE 100 //顺序栈的存储空间的初始分配量
#define SElemType int
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;

//栈的初始化
void InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(sizeof(SqStack)*MAXSIZE); //分配最大存储内存
if(!S->base)
{
printf("初始化失败!\n");
exit(0);
}
else
{
S->top=S->base; //top初始值为base,栈空
S->stacksize=MAXSIZE; //stacksize置为栈的最大存储容量
printf("初始化成功!\n");
}
return 0;

}
//入栈
void Push(SqStack *S)
{
SElemType e;
printf("请输入入栈元素: ");

if(S->top - S->base==S->stacksize)
    printf("栈满\n");
else
{
    scanf("%d\n",&e);
    *S->top++=e;    //把S栈顶指针指向E,运算完成后栈空间才自增1
    printf("入栈成功,栈顶元素为:%d\n\n",e);
}

}

//出栈
void Pop(SqStack S,SElemType *e)
{
if(S->top-S->base==S->stacksize)
printf("\n栈满\n\n");
else
{
e=
--S->top; //优先级 '.' > "--" = '*'
if(S->base==S->top)
printf("栈空\n\n");
else
printf("出栈成功,栈顶元素为:%d\n\n",*S->top );
}
return 0;
}

//取栈顶元素,不修改栈顶指针
void GetTop(SqStack *S,SElemType *e)
{
if(*S->top!=*S->base) //栈非空
printf("%d\n\n",*S->top);
else
printf("sorry! zhankong!\n\n");
return 0;
}
int main()
{
int x;
SElemType e;
SqStack S;
InitStack(&S);
for(;;)
{
printf("主菜单\n");
printf("1、入栈\n2、出栈\n3、输出栈顶元素\n4、退出\n");
printf("请选择:");
scanf("%d",&x);
switch(x)
{
case 1:
Push(&S);
break;
case 2:
Pop(&S,&e);
break;
case 3:
GetTop(&S,&e);
break;
case 4:
exit(0);
}
}
return 0;
}

  • 写回答

1条回答 默认 最新

  • 小灸舞 2016-04-23 12:20
    关注

    scanf里多了\n

     #include<iostream>
    #include<stack>
    using namespace std;
    #define MAXSIZE 100 //顺序栈的存储空间的初始分配量
    #define SElemType int
    typedef struct
    {
        SElemType *base;
        SElemType *top;
        int stacksize;
    } SqStack;
    //栈的初始化
    void InitStack(SqStack *S)
    {
        S->base=(SElemType *)malloc(sizeof(SqStack)*MAXSIZE); //分配最大存储内存
        if(!S->base)
        {
            printf("初始化失败!\n");
            exit(0);
        }
        else
        {
            S->top=S->base; //top初始值为base,栈空
            S->stacksize=MAXSIZE; //stacksize置为栈的最大存储容量
            printf("初始化成功!\n");
        }
        return;
    }
    //入栈
    void Push(SqStack *S)
    {
        SElemType e;
        printf("请输入入栈元素: ");
        if(S->top - S->base==S->stacksize)
            printf("栈满\n");
        else
        {
            scanf("%d",&e);
            *S->top++=e;    //把S栈顶指针指向E,运算完成后栈空间才自增1
            printf("入栈成功,栈顶元素为:%d\n\n",e);
        }
    }
    //出栈
    void Pop(SqStack *S,SElemType *e)
    {
        if(S->top-S->base==S->stacksize)
            printf("\n栈满\n\n");
        else
        {
            e=--S->top; //优先级 '.' > "--" = '*'
            if(S->base==S->top)
                printf("栈空\n\n");
            else
                printf("出栈成功,栈顶元素为:%d\n\n",*S->top );
        }
        return;
    }
    //取栈顶元素,不修改栈顶指针
    void GetTop(SqStack *S,SElemType *e)
    {
        if(*S->top!=*S->base) //栈非空
            printf("%d\n\n",*S->top);
        else
            printf("sorry! zhankong!\n\n");
        return;
    }
    int main()
    {
        int x;
        SElemType e;
        SqStack S;
        InitStack(&S);
        for(;;)
        {
            printf("主菜单\n");
            printf("1、入栈\n2、出栈\n3、输出栈顶元素\n4、退出\n");
            printf("请选择:");
            scanf("%d",&x);
            switch(x)
            {
            case 1:
                Push(&S);
                break;
            case 2:
                Pop(&S,&e);
                break;
            case 3:
                GetTop(&S,&e);
                break;
            case 4:
                exit(0);
            }
        }
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况