关于数据结构、C指针、结构类型的问题

我目前在看<大话数据结构>,其中关于指针的部分总是有点不明白,就以二叉树链式结构为例。代码中定义了结点结构typedefstructBiTNode/*结点结构*/{TEl... 我目前在看<大话数据结构>,其中关于指针的部分总是有点不明白,就以二叉树链式结构为例。
代码中定义了结点结构
typedef struct BiTNode /* 结点结构 */
{
TElemType data; /* 结点数据 */
struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;

然后是初始化一个空树的函数。
Status InitBiTree(BiTree *T)
{
*T=NULL;
return OK;
}

程序是无错可以执行的。

一、关于结构变量的问题
在定义结构的时候,
(1)
struct BiTNode
{
……
}BiTNode;
(2)
struct BiTNode
{
……
}; //后面不加什么BiTNode也没有*BiTree
(3)
struct
{
……
}BiTNode;
(4)
typedef struct BiTNode
{
……

}BiTNode;

以上四种有什么区别?然后第1种和第4种中的第一行的BiTNode和右花括号后的BiTNode一样了,这样也行?

二、关于该程序的问题
这里的BiTNode和*BiTree到底是什么意思,有*没*什么区别?我觉得BiTNode应该就是表示结点本身,BiTree(以我个人理解这里不加*)应该就是表示根节点的地址的指针,要是加*也就是*BiTree应该就是表示根结点本身。这样理解对吗?
BiTree *T 又是什么意思?如果BiTree就相当于struct BiTNode *的话,那BiTree *T岂不就是相当于struct BiTNode **T,这样就有两个*了。这样对吗?那BiTree到底相当于什么呢?
展开
 我来答
q86456378q
2013-07-07 · 超过34用户采纳过TA的回答
知道答主
回答量:102
采纳率:100%
帮助的人:62.6万
展开全部
第一种方式定义结构体 BiTNode和结构体变量BiTNode
第二种方式只定义了结构体 BiTNode
第三种方式只定义了结构变量BiTNode,无法再扩展结构体变量,因些不常用
第四种试定义了结构体BiTNode,并给结构体起了一个别名BiTNode,用BiTNode就代表结构体

typedef struct BiTNode /* 结点结构 */
{
TElemType data; /* 结点数据 */
struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;
这里最下面一行BiTNode代表结构本身,typedef就是用后面的符号去替换前面的。这里是定义了结构体指针变量
更多追问追答
追问
那么为什么第1种和第4种中的第一行的BiTNode和右花括号后的BiTNode一样也行?
追答
第一种最后的BiTNode是相当于结构的变量,第四种最后的BiTNode;是相当于结构的变量别名。意义不一样
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式