关于出栈入栈的疑问

dear_xx 2011-04-02 10:47:02
入栈算法:
int Push_Seqstack(SeqStack *s,datatype x)
{
if(s->top==MAXSIZE-1) return 0;
else{
s->top++;
s->data[s->top]=x;
return 1;
}
}

出栈算法:
int Pop_SeqStack(SeqStack *s,datatype *x)
{
if(Empty_SeqStack(s)) return 0;
else
{*x=s->data[s->top]; s->top--;
return 1;
}
}


疑问:
为什么出栈算法和取栈顶算法要用*x指向,而入栈算法不用?
...全文
309 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
dear_xx 2011-04-03
  • 打赏
  • 举报
回复
我不懂,哪有改变?[Quote=引用 15 楼 huacong20082009 的回复:]
需要更改传入参数的值,就需要传入地址
[/Quote]
666233 2011-04-03
  • 打赏
  • 举报
回复
int Push_Seqstack(SeqStack *s,datatype x)
int Pop_SeqStack(SeqStack *s,datatype *x)
乐CC 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hzhxxx 的回复:]
建议去看看数据结构 C 语言版本的
[/Quote]
了解了什么是入参和出参就知道为什么了
woshiwuxingcheng 2011-04-02
  • 打赏
  • 举报
回复
出栈的时候x的值变化了
dear_xx 2011-04-02
  • 打赏
  • 举报
回复
有吗?[Quote=引用 9 楼 woshiwuxingcheng 的回复:]
出栈的时候x的值变化了
[/Quote]
majia2011 2011-04-02
  • 打赏
  • 举报
回复
和出栈入栈一点关系都没有

就一个指针问题,lz,好好看书
huacong20082009 2011-04-02
  • 打赏
  • 举报
回复
需要更改传入参数的值,就需要传入地址
luohaohahaha 2011-04-02
  • 打赏
  • 举报
回复
入栈 : 你是把一个你要存放的普通变量x的值放入栈顶,如果用*x的话,就是把x的地址值放入栈顶。
出栈: 是把已经装着元素的栈顶元素,给一个其他变量来保存。
另外,*x=s->data[s->top]; 这一句并不是表示指针指向什么什么,而是,把栈顶元素赋给x指向的地址存放的值。注意 定义时的int *x, 区分用它的时候 x(指针),*x(指针指向的值)。
jialejiahi 2011-04-02
  • 打赏
  • 举报
回复
这个不算是栈的问题吧,是函数形参是否用指针的问题。
用指针就可以改变调用函数里x的值,是否需要取决于具体应用。
栈的话一般都是需要的,你也可以直接这样写啊

int Pop_SeqStack(SeqStack *s)
{
int x;
if(Empty_SeqStack(s)) return 0;
else
{
x = s->data[s->top];
s->top--;
return x;
}
}

然后调用的时候用x = Pop_SeqStack(s);
無_1024 2011-04-02
  • 打赏
  • 举报
回复
不同的解释不同的算法 出战的时候要保存出栈的值 所以用按引用传递
但是也可以不用 就不能返回出栈的值了 好比STL库中的stack一样
linux_ljm 2011-04-02
  • 打赏
  • 举报
回复
入栈的时候不用改变值的内容
用值传递即可
出栈时要x用来保存出栈的数据
用指针变量
hhh_hao 2011-04-02
  • 打赏
  • 举报
回复
出栈算法和取栈顶算法要用*x指向, 是传指针, 可以直接修改指针指向的内容,


int x = 0;

Pop_SeqStack(s,&x); //传地址,X就可以被修改...



入栈没这个必要
hzhxxx 2011-04-02
  • 打赏
  • 举报
回复

建议去看看数据结构 C 语言版本的
hzhxxx 2011-04-02
  • 打赏
  • 举报
回复

建议去看看数据结构
2220728 2011-04-02
  • 打赏
  • 举报
回复
我也正学习中
qiangv 2011-04-02
  • 打赏
  • 举报
回复
建议了解 函数调用的值传递和引用传递,指针传递的区别。
bcj00000 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 dear_xx 的回复:]
入栈算法:
int Push_Seqstack(SeqStack *s,datatype x)
{
if(s->top==MAXSIZE-1) return 0;
else{

s->data[s->top]=x;
s->top++;

return 1;
}
}

出栈算法:
int Pop_……
[/Quote]

因为形参,想要得到数据必须用指针。
就是涵数形参指针问题,看看指针那块吧
Sugite 2011-04-02
  • 打赏
  • 举报
回复
这纯粹的指针问题,6楼正解

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧