链栈的问题?有人能解释1下吗!

y19881105 2010-08-12 10:10:29
链栈的类型说明:
typedef struct stacknode{
DataType data;
struct stacknode * next;
}StackNode;

typedef struct{
StackNode * top;
} LinkStack;

书上说 虽然低二个类型第一中的结构只包含一个栈,可省略结构定义而直接用top指针来定义栈。但是进,退栈操作要
频繁修改top指针本身,而C的函数调用中缺乏C++那样的引用调用,所以必须使用指针的指针作为参数才能在函数体中修改实参指针top本身。

它指的修改top本身 是top所存的地址变量,还是top的地址,如果是修改top所存的地址变量,那何必定义第2个,如果是修改top这个指针变量所在的地址,那和进退栈又有什么关系? 希望高人解答!!!!!!!!
...全文
128 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
air_snake 2010-08-25
[Quote=引用 7 楼 baiyuan8826 的回复:]

每次传入StackNode类型的指针,也返回StackNode类型的指针,指向新栈顶,如
StackNode* Push( IN StackNode* top, IN DataType* pdata );
StackNode* Pop( IN StackNode* top, OUT DataType* pdata );
[/Quote]

就是这个问题.你必须依靠返回值才能找到你堆栈的top,如果你的函数定义返回int
int Push( IN StackNode** top, IN DataType* pdata );
int Pop( IN StackNode** top, OUT DataType* pdata );
这就是书上说的意思,不然你更改不了top

定义第二个是为了减少理解麻烦
int Push( IN LinkStack* top, IN DataType* pdata );
int Pop( IN LinkStack* top, OUT DataType* pdata );


回复
mao_pu_hua 2010-08-18
其实书上说的进退栈都传入的是LinkStack *p类型的。 你又没有修改p的值,只是修改了p->top的值。肯定是没问题的。呵呵。
回复
fx397993401 2010-08-15

回复
canshui 2010-08-15
c语言中的函数的传递按值传递的,这句话虽然看似简单,不过lz还要在好好理解一下……

对于,指针类型当然也不例外!你要达到在函数中,对一个指针变量进行修改。传递的时候,要传递该指针变量的地址。然后,修改这个地址内的指针变量的值,即你说的 “top所存的地址变量” ……,达到对栈的修改……
回复
baiyuan8826 2010-08-14
每次传入StackNode类型的指针,也返回StackNode类型的指针,指向新栈顶,如
StackNode* Push( IN StackNode* top, IN DataType* pdata );
StackNode* Pop( IN StackNode* top, OUT DataType* pdata );
回复
maoxing63570 2010-08-13
如果楼主需要可以给我留言,留下你的邮箱,我发个我写的代码给你看下吧
回复
maoxing63570 2010-08-13
既然是通过指针的指针来操作的话,那么修改的肯定就是top本身所存储的地址了,但是这样做并不好,可能会使top所向的元素不是栈底元素,最好还是直接通过一重指针来做要比较好点
回复
Six_dimensional 2010-08-13
它指的修改top本身 ,是top的地址,
回复
y19881105 2010-08-13
Top应该指向的是栈顶元素吧
回复
a707569552 2010-08-12
我觉得修改top所存的地址变量来使之永远指向栈顶,至于为什么定义LinkStack,感觉定不定义都无所谓,
回复
liuhaifeng1976 2010-08-12
top始终指向栈顶,每压入Stacknode,top就加1 ,这里data是有顺序的,每个data有一个指针指向后一个data ,这是我的理解
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告