关于栈,队列,树的问题

1.关于如何取结构体里的成员:

如图,定义了一个结构体,然后我们再定义一个结构体变量,如  Stack stack;

显然我们定义的变量不是一个指针,它只是一个普通的拥有两个成员的结构体,此时,如果我们需要取出这个结构体里

的 top 这个成员,就只有一种可行的方法,就是  stack . top;

这时我们再定义一个变量,如  Stack* s;显然这个 s 是一个指针 ,它指向图中的这种结构体,这种情况下我们要想取出

里面的 top 成员就有两种方法,一种是我们常用的  s->top;  还有一种就是 (*s ) . top;

由此可以得出当我们定义的变量不是一个指针类型时,是不存在  ->  这种取成员的方式的。

2.关于老师给我们的栈的顺序结构的代码中的误区:

如上图, top   是用来记录栈顶的位置的,所以有些人就会误认为  top  是一个指向栈顶的指针,但实际上 top  是一个

int类型的数据,并不是指针,但是它可以用来记录栈顶的位置,如图

3.关于树的代码中的update函数为什么不传tree的地址,而clear函数要传tree的地址

如图很明显update函数只将tree传给了形参t,而clear函数却将tree的地址传给了t,明明两个函数都需要更改结构体里的数据,

而update函数却不传地址呢?

其实这两个函数是有本质的区别的,update需要更新结构体里的数据,所以需要传入的是结构体的地址,只有这样才能更改

里面的数据,但tree本就是struct treenode*类型的,它就是一个指针,存放着结构体的地址,所以当我们需要把结构体的

地址传给update函数时,完全就可以把tree传给形参t,这样就已经实现了我们的目的,就可以更改结构体里的数据了。

而clear函数不同于update函数,clear函数需要改变的不是结构体里的数据,而是需要让tree的子树为空,就是要让tree的

指向变为空,即让tree指向NULL,所以需要把tree的地址传给形参t,让t变为二级指针,在通过free(*t);*t = NULL的操作来实

现让tree自身指向NULL,用图来表示如下

猜你喜欢

转载自blog.csdn.net/qq_42720695/article/details/81488040
今日推荐