数据结构第十二讲代码中的一些问题
数据结构第十二讲源代码中: LinkList p......,p = (Node *)malloc(sizeof(Node)),p到底是什么,它是node类型的吗?*L = (LinkList)malloc(sizeof(Node))线性表L已经申请了动态空间,那P为什么还要申请动态空间? 很尴尬,没人回复解释一下吗 你好 能给我看看源码吗? 我估计是添加一个节点。 qq1242009750 发表于 2017-11-25 17:42
你好 能给我看看源码吗? 我估计是添加一个节点。
/* 头插法建立单链表示例 */
void CreateListHead(LinkList *L, int n)
{
LinkList p;
// 注意:linkList 声明有*,后续调用就有*,p22所示
// LinkList 声明没有*,后续就没有,p18所示
int i;
// 长和time结合,生成更加像随机数的数
srand(time(0)); // 初始化随机数种子
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for( i=0; i < n; i++ )
{
p = (LinkList)malloc(sizeof(Node));// 生成新结点
// 得到两位数,就和100取余
p->data = rand()%100+1;
p->next = (*L)->next;
// *号优先级底,所以用括号包起来
(*L)->next = p;
}
}
。。。
//我知道上面的代码省略了对LinkList类型的定义(定义在16讲中),代码中L是头结点还是头指针?每次新建都默认是那样的吗?:p = (LinkList)malloc(sizeof(Node));一次循环生成一个结点吗?每次循环插入一个结点L都是最前面的那个头xx吧。(*L)换成L应该没什么问题吧。 1.(*L)是头节点,L是指向头节点指针的指针,也就是我们说的二级指针。
2.每次新建都是这样。
3.P=(LinkList)malloc(sizeof(Node))是循环一次生成一个节点。
4.这里插入节点用的是头插法,每一个循环生成的节点都插入在(*L)->Next。
5.不能,因为L是一个指向指针的指针, 修改L只是修改了2级指针,并不能改变(*L)->Next的值。
页:
[1]