圣狄雅哥 发表于 2017-11-23 20:40:24

数据结构第十二讲代码中的一些问题

数据结构第十二讲源代码中: LinkList p......,p = (Node *)malloc(sizeof(Node)),p到底是什么,它是node类型的吗?
*L = (LinkList)malloc(sizeof(Node))线性表L已经申请了动态空间,那P为什么还要申请动态空间?

圣狄雅哥 发表于 2017-11-23 23:08:51

很尴尬,没人回复解释一下吗

qq1242009750 发表于 2017-11-25 17:42:57

你好 能给我看看源码吗? 我估计是添加一个节点。

圣狄雅哥 发表于 2017-11-27 17:13:29

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应该没什么问题吧。

qq1242009750 发表于 2017-11-27 22:51:25

1.(*L)是头节点,L是指向头节点指针的指针,也就是我们说的二级指针。
2.每次新建都是这样。
3.P=(LinkList)malloc(sizeof(Node))是循环一次生成一个节点。
4.这里插入节点用的是头插法,每一个循环生成的节点都插入在(*L)->Next。
5.不能,因为L是一个指向指针的指针, 修改L只是修改了2级指针,并不能改变(*L)->Next的值。
页: [1]
查看完整版本: 数据结构第十二讲代码中的一些问题