C语言问题:顺序栈的基本操作 请帮我看看错哪了 急!!

比如我输入1 2 3
正确输出应该是:3
但是这个代码运行完输出为:栈空了!!!

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;

void Push(SqStack S,int e)
{//插入元素e为新的栈顶元素
if(S.top-S.base==S.stacksize)
{
printf("错误!!!栈满了!!!!");
exit(0);
}
*S.top=e;
S.top++;
}

int GetTop(SqStack S)
{
if(S.top!=S.base)
return *(S.top-1);
else
{
printf("栈空了!!!");
exit(0);
}
}

int main()
{
SqStack S;
//InirStack(S);
S.base=(int *)malloc(sizeof(MAXSIZE));
if(S.base==NULL) exit(0);
S.top=S.base;
S.stacksize=MAXSIZE;
int i,e,n;
printf("请输入_入栈元素个数:");
//system("pause");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个入栈元素:",i+1);
scanf("%d",&e);
Push(S,e);
}
int ding;
ding=GetTop(S);
printf("栈顶元素为:%d\n",ding);
return 0;
}

SqStack *S;栈操作要是结构体指针,避免传参时只传形参。栈中的top和base可以不是指针。
修改后:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
typedef struct
{
int base;
int top;
int stacksize;
}*SqStack;

void Push(SqStack S,int e)
{//插入元素e为新的栈顶元素
if(S->top-S->base==S->stacksize)
{
printf("错误!!!栈满了!!!!");
}
S->top=e;
S->top++;
}

int GetTop(SqStack S)
{
if(S->top!=S->base)
return (S->top-1);
else
{
printf("栈空了!!!");
}
}

int main()
{
SqStack S;
//InirStack(S);
S = (SqStack)malloc(sizeof(SqStack));
if(S->base==NULL) exit(0);
S->top=S->base;
S->stacksize=MAXSIZE;
int i,e,n;
printf("请输入_入栈元素个数:");
//system("pause");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个入栈元素:",i+1);
scanf("%d",&e);
Push(S,e);
}
int ding;
ding=GetTop(S);
printf("栈顶元素为:%d\n",ding);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-30
struct是值类型,S.top++出了scope就没用了
相似回答