编程论坛
注册
登录
编程论坛
→
数据结构与算法
动态栈的实现
追寻XT
发布于 2016-10-11 14:16, 2849 次点击
花了两个小时,写完了栈类型的类型与操作的主要定义与实现,遍历函数中函数指针的地方还是不太明白,代码放上来,大家看看,希望批评指正!!!接下里打算写几个栈的应用实例,如号括匹配,简单的算是计算。。。。
只有本站会员才能查看附件,请
登录
只有本站会员才能查看附件,请
登录
只有本站会员才能查看附件,请
登录
只有本站会员才能查看附件,请
登录
只有本站会员才能查看附件,请
登录
[此贴子已经被作者于2016-10-11 14:17编辑过]
6 回复
#2
书生牛犊
2016-10-11 14:34
把代码以贴图的形式发上来是不是不希望别人直接使用? 是在保护版权吗?
代码是用眼睛看的吗? 算了,希望真的会有大神给你看看,给你批评指正吧。
#3
书生牛犊
2016-10-11 14:49
我看了你的堆栈结构。我认为是不太合适的,你的base分明是个ElementType数组(由stack_init_size在编译的时候确定),stacksize指示堆栈内容量(话说这个容量不是常量stack-init-size吗?),top居然又是个指针指向栈顶地址(都用数组了,又何必搞这个).
1.你要让base做数组,那么你只需要一个unsigned int 指示栈顶元素就好。至于堆栈状态是不是满的,反正有stack-init-size在何必大费周章在每个结构体里浪费空间做无意义的劳动?
2.我见过链表结构是 struct {ElementType*base;ElementType*Top;int StackSize;}的,不过人家的堆栈是base是个链表,Top指向base链表的尾结点(最后插入的元素),StackSize记录堆栈内现有容纳元素多少(可有可无,可以在后期通过遍历base链表得到)。用链表方式做堆栈,堆栈容量理论上是可以“无限大”的。用数组方法做堆栈如果想要健壮点的话可以效仿哈希算法的ReHash,每当数组内元素达到一定比例就构造一个双倍长度的数组,并将旧数组的元素复制过去。用新数组取代旧数组。效率上当然是远不如链表的方便快捷,但是数组构造法不需要频繁的malloc,free,时间上可能会更好些。
#4
追寻XT
2016-10-11 18:37
回复 2楼 书生牛犊
不好意思,是怕的代码太多,复制粘贴出错,另一个是想把文件名带上,下次一定会注意的,谢谢!
#5
追寻XT
2016-10-11 19:03
回复 3楼 书生牛犊
扩大容量,我用的是realloc()函数,stacksize,只在Stack结构体中,占用了内存空间,但是有些多余,谢谢你的意见,我会继续完善的。
#6
azzbcc
2016-10-12 09:15
花了几分钟,把你的代码看完.
没有什么出彩的地方,中规中矩的实现书上的代码,并不值得关注
倒是因为不理解函数指针所以栈的遍历化蛇添足
#7
追寻XT
2016-10-12 13:30
回复 6楼 azzbcc
确实,visit()函数的有些多余,但是也有好处,compare()函数基本不用修改,针对不同的数据结构,只修改visit()就可以了,才开始学数据结构,只想不书上的算法用代码实现一遍,还没有找到正确的学习方法。。。。。。
1