请大侠帮忙看一个顺序栈的问题,为何元素进栈后top不会跟着增加。

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:56:04
在下面的程序中进行了两次进栈,栈指针本应该由-1变为1,但为何每次完成进栈后top均为0;请大侠帮忙看看。
typedef struct
{ char data[Maxzize];
int top;
}sqstack;

sqstack Initstack(sqstack L)/*初始化*/
{
L.top=-1;
if(L.top==-1)printf("\nOK\n");
else printf("\nfail\n");
return L;
}
int Push(sqstack L,char x)/*进栈*/
{printf("\nNow top :%d",L.top);
if(L.top==Maxzize-1)

return 0;

else
{
L.top++;
L.data[L.top]=x;
printf("\ntop=%d",L.top);

return 1;
}
}
main()
{
sqstack st;
char x;
st=Initstack(st);
Push(st,'a');
Push(st,'b');

getch();

}
这个问题中,弄个指针sqstack *p指向st,将进栈函数改成int Push(sqstack *L,char x),函数内容稍做修改,也能解决,但是如果不改,我的理解是sqstack st是在main中定义的,它在整个函数中应该都有效,那么Push函数调用结构体变量st后,st的成员应该改变才对啊,请大侠指点一下。先谢了。

因为你的Push函数的参数sqstack采用的是值传递,这样你对参数的修改根本不会影响实参,你可以用指针试试,我已经帮你修改了Push函数,如下:

int Push(sqstack *L,char x)/*进栈*/
{
printf("\nNow top :%d",L->top);
if(L->top==Maxzize-1)
return 0;

else
{
L->top++;
printf("\ntop=%d",L->top);
return 1;
}
}

调用时传入地址即可
Push(&st,'a');
Push(&st,'b');

happy coding!