关于数据结构、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到底相当于什么呢? 展开
代码中定义了结点结构
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到底相当于什么呢? 展开
展开全部
第一种方式定义结构体 BiTNode和结构体变量BiTNode
第二种方式只定义了结构体 BiTNode
第三种方式只定义了结构变量BiTNode,无法再扩展结构体变量,因些不常用
第四种试定义了结构体BiTNode,并给结构体起了一个别名BiTNode,用BiTNode就代表结构体
typedef struct BiTNode /* 结点结构 */
{
TElemType data; /* 结点数据 */
struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;
这里最下面一行BiTNode代表结构本身,typedef就是用后面的符号去替换前面的。这里是定义了结构体指针变量
第二种方式只定义了结构体 BiTNode
第三种方式只定义了结构变量BiTNode,无法再扩展结构体变量,因些不常用
第四种试定义了结构体BiTNode,并给结构体起了一个别名BiTNode,用BiTNode就代表结构体
typedef struct BiTNode /* 结点结构 */
{
TElemType data; /* 结点数据 */
struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;
这里最下面一行BiTNode代表结构本身,typedef就是用后面的符号去替换前面的。这里是定义了结构体指针变量
更多追问追答
追问
那么为什么第1种和第4种中的第一行的BiTNode和右花括号后的BiTNode一样也行?
追答
第一种最后的BiTNode是相当于结构的变量,第四种最后的BiTNode;是相当于结构的变量别名。意义不一样
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询