| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1351 人关注过本帖
标题:新手学习的疑惑
只看楼主 加入收藏
jsfserver
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-19
收藏
 问题点数:0 回复次数:11 
新手学习的疑惑
我是一个新手,刚刚学习<<数据结构>>,我看的是清华大学出版社 严蔚敏 吴伟民版的
据说这是经典版,所以看的这个版本.
我现在学到栈,但对其中进栈那段代码有疑惑,具体如下
Status Push( SqStack S,SElemType &e ){
//插入元素e为新的栈顶元素
if ( S.top-S.base>=S.stacksize ) { //栈满,追加存储空间
S.base = ( SElemType * ) realloc (S.base,
(S.stacksize+SATACKINCREMENT) * sizeof(SElemType));
if(!S.base) exit(OVERFLOW);//存储失败
S.top=S.base+S.tacksize;
S.stacksize+= SATACKINCREMENT;
}
*S.top++=e;
return OK;
}
我看了这段压栈代码后,觉得S.top-S.base>=S.stacksize这一段有问题,因为根据C语言,
S.top-S.base在不上泄的情况下,它的最大值只能是S.tacksize-1,那S.top-S.base>=S.stacksiz这个为真,S.top由于*S.top++=e;就必然会指向在新建栈时所分配的那段连续地址以外的地址,我看了其他版本的数据结构,他们判断栈是否满的时候都是S.top和S.stacksize-1进行比较,所以究竟哪个对?我想严出的经典书不会错吧,但这样做不好吧!
请高手解释一下
搜索更多相关主题的帖子: 学习 
2005-11-19 12:28
ajey2004
Rank: 1
等 级:新手上路
帖 子:164
专家分:0
注 册:2004-12-30
收藏
得分:0 
S.top-S.base在不上泄的情况下,它的最大值只能是S.tacksize-1,那S.top-S.base>=S.stacksiz这个为真
??不是假吗??
这里是一个大于等于号,其实就是在等于的时候执行if里面的语句,相等的时候不是刚好没有合法空间存储元素了吗

2005-11-19 18:43
jsfserver
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-19
收藏
得分:0 
S.top-S.base在不上泄的情况下,它的最大值只能是S.tacksize-1,那
S.top-S.base>=S.stacksiz这个为真
我看错了,是应该为假
我的疑惑是:将一个指针移到一个不是刚开始连续分配的一个地址上,这样做法好吗?
就是假设栈的空间为10,那栈满的时候,栈顶指针指向刚开始连续分配的第10个地址后面的那个地址上,那样栈顶指针不在连续分配的地址上,还能直接进行指针减运算吗?
2005-11-19 19:44
心若在
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2004-9-21
收藏
得分:0 

2楼说的很对啊


我知道我菜 但我会尽我最大的努力去帮助别人!
2005-11-21 08:40
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

很明显那本垃圾经典数据结构出错了.应该该为S.top-S.base==S.stacksiz-1
因为根本没有可能会出现大于,本来栈满就不能插入数字,哪里来了>号??

如果是初学数据结构的人就不要看严蔚敏的书,本来很简单的东西她偏要搞那么复杂..
推荐看西安电子科技大学朱战立出的.这本书的好处就是有完整的代码.而严蔚敏的那本
垃圾连完整的代码都没有,学个鬼啊.


c++/C + 汇编 = 天下无敌
2005-11-22 16:00
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
S.top是什么?S.base又是什么?

[QUOTE] *S.top++=e;[/QUOTE]

很明显,是个指针,那么,

[QUOTE]他们判断栈是否满的时候都是S.top和S.stacksize-1进行比较[/QUOTE]

是否可以比较?S.stacksize是指针么?

所以,你不要断文取义,提问要让别人能看明白要提供完整的资料才行。



九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-11-22 16:11
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

2楼的问题,能。物理上可能是不连续,但逻辑上是连续的。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-11-22 16:16
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

事实上是可以比较的,因为两个指针相减就是整型值,当然可以跟S.stacksize比较.
.我突然发现了.s.top-s.base == s.stacksize才是正确的,因为s.base是首地址.
所以s.top-s.base刚刚好是插入元素的个数,但是严蔚敏加上>号就是多余拉

附带:严蔚敏的书本来就没有完整的代码




c++/C + 汇编 = 天下无敌
2005-11-22 19:15
cranky
Rank: 1
等 级:新手上路
威 望:1
帖 子:89
专家分:0
注 册:2005-11-21
收藏
得分:0 

就我理解我随便忽悠两句


首先">="没错,最多也是多了个">",应为不可能出现">"的情况
还有就是存储空间不连续也没问题哈!!文件存储也同样是不连续的,
指针的经典就在于可以把不连续的存储组合在一起,让大家以为是连续的,所以说不连续对于实现这个算法或者说实现
栈完全没影响


一个不知道天高地厚,想问什么时候才是满壶水的鬼 --------------半壶水响叮当
2005-11-22 23:49
ylm113
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-11-26
收藏
得分:0 
看不明白,过一段时间再来看看,我先学习学习

2005-11-26 18:20
快速回复:新手学习的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016264 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved