2 qq 34766621 qq_34766621 于 2016.04.23 19:01 提问

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

#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个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.23 20: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;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!