LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: home_king

关于采用链栈实现递归消除二叉树的遍历

[复制链接]
发表于 2004-12-5 14:59:00 | 显示全部楼层
最初由 home_king 发表
另外,可以看到简单的这样一个头文件,如果疏忽,都会犯命名冲突的错误。
C语言本身不包含命名冲突解决机制,这是很头痛的事情,要是项目大了,那么按照section1_section2_section3_...sectionN来命名,那岂不是很烦。

用static可以限定一个符号的作用域为本文件。
发表于 2004-12-5 15:00:36 | 显示全部楼层
最初由 home_king 发表

to kj501兄:
关于按需包含头文件,好象按照
#ifdef STACK_H
#define STACK_H
#endif
来做不行阿。反而像我这样做倒是可以,虽然我不知道规不规范。

如果你是按需要包含头文件,你的做法也可以。但你这里只有一个stack.h,没有必要这么做吧。
 楼主| 发表于 2004-12-5 15:08:00 | 显示全部楼层
最初由 kj501 发表
用static可以限定一个符号的作用域为本文件。

呵呵,就只有这可怜的作用域限定法。不是严格意义的命名冲突解决机制。
 楼主| 发表于 2004-12-5 15:09:29 | 显示全部楼层
kj501兄,可以说说本例中链栈初始化后,再压入NULL的必要性吗?
发表于 2004-12-5 15:52:47 | 显示全部楼层
我认为没有必要。虽然ls->top在压入第一个元素时被置换掉了。但p->next=ls->top可以把这个NULL空指针保留下来。出栈时不会有问题。
发表于 2004-12-5 16:06:00 | 显示全部楼层
  1. int push_lkstack(lkstack *ls,lkstack_datatype x)
  2. {
  3.   lkstack_pointer p=(lkstack_pointer)malloc(sizeof(struct lkstack_node));
  4.   p->data=x;
  5.   p->next=ls->top;
  6.   ls->top=p;
  7.   return 1;
  8. }
复制代码


push时的NULL是lkstack_node的data
发表于 2004-12-5 16:20:05 | 显示全部楼层
最初由 yangtou 发表
push时的NULL是lkstack_node的data

呵呵,你倒看得挺仔细。
说句老实话,我一看到多重指针的东东就觉得头痛。yangtou兄有什么好办法吗?
发表于 2004-12-5 16:31:16 | 显示全部楼层
教主的代码里面有好多typedef,我也是好长时间才看明白的
 楼主| 发表于 2004-12-5 16:42:47 | 显示全部楼层
呵呵。
我想问一下为什么要用(void *)&p作为传递的指针实参呢?
p本身就是结点指针,然后你用&取址,再限定为void类型空指针?
这样就能匹配pop_lkstack中的void类型形参?
发表于 2004-12-5 17:01:23 | 显示全部楼层
要改变实参就要用指向形参类型的指针做形参,如果要改变指针类型的实参就要用指向指针类型的指针做形参.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表