为什么约定如果输入学号为0,则表示建立链表的过程已完成
1个回答
展开全部
建立动态链表:
明白一个概念:什么叫动态链表?所谓的动态链表是指在程序运行过程中从无到有的建立起一个链表,即一个一个的开辟结点和输入结点的数据,并建立前后相链的关系.
从这个概念中我们可以知道要建立一个动态链表要做三件事:开辟结点,输入数据,建立链接.
例:写一个函数建立一个有3名学生数据的单向链表.
分析:首先我要写的是一个函数,而不是一个完整的程序.
其次要明确这个函数的功能是建立一个链表.
最后要清楚建立链表要做的三件事情.
下面我们来分析一个具体算法:
首先要定义三个结构体指针变量:head,p1,p2.接下来用malloc来开辟一个结点空间,并使p1,p2指向这个结点的起始地址.再从键盘输入数据.这里我们约定输入的学号不为0,为0就要结束建立链表.如果这时给该结点输入的学号不为0,则这个结点应链入.此时由于该结点是链表的第一个结点,所以应该把head指向第一个结点的起始地址,即:head=p1.然后再开辟一个结点,使p1指向它,接着输入该结点的数据,同理如果学号不为0,则应链入.此时N!=1,则应使p1指向的结点地址给前一个结构体指针,这样才能使前后相链.即:p2->next=p1.接着使p2=p1,因为只有这样才能不断的开辟下一个结点.此时再开辟一个结点,使p1指向它.输入数据,如果学号不为0,则链入.再将p1指向的地址给前一个结构体指针,即:p2->next=p1.接着使p2=p1.如此重复以上步骤,可以不停的开辟多个结点.要想停止开辟,只要输入学号为0即可.不过此时要有一点要注意的:即然有了输入,也就是说这个结点已经开辟了,但是学号为0只是一个结束条件,并不是真正的学生号,所以它不应该被链入链表中.所以应该让该结点的前一个结点的结构体指针置空.即:p2->next=NULL.此时结束了整个链表的建立.
明白一个概念:什么叫动态链表?所谓的动态链表是指在程序运行过程中从无到有的建立起一个链表,即一个一个的开辟结点和输入结点的数据,并建立前后相链的关系.
从这个概念中我们可以知道要建立一个动态链表要做三件事:开辟结点,输入数据,建立链接.
例:写一个函数建立一个有3名学生数据的单向链表.
分析:首先我要写的是一个函数,而不是一个完整的程序.
其次要明确这个函数的功能是建立一个链表.
最后要清楚建立链表要做的三件事情.
下面我们来分析一个具体算法:
首先要定义三个结构体指针变量:head,p1,p2.接下来用malloc来开辟一个结点空间,并使p1,p2指向这个结点的起始地址.再从键盘输入数据.这里我们约定输入的学号不为0,为0就要结束建立链表.如果这时给该结点输入的学号不为0,则这个结点应链入.此时由于该结点是链表的第一个结点,所以应该把head指向第一个结点的起始地址,即:head=p1.然后再开辟一个结点,使p1指向它,接着输入该结点的数据,同理如果学号不为0,则应链入.此时N!=1,则应使p1指向的结点地址给前一个结构体指针,这样才能使前后相链.即:p2->next=p1.接着使p2=p1,因为只有这样才能不断的开辟下一个结点.此时再开辟一个结点,使p1指向它.输入数据,如果学号不为0,则链入.再将p1指向的地址给前一个结构体指针,即:p2->next=p1.接着使p2=p1.如此重复以上步骤,可以不停的开辟多个结点.要想停止开辟,只要输入学号为0即可.不过此时要有一点要注意的:即然有了输入,也就是说这个结点已经开辟了,但是学号为0只是一个结束条件,并不是真正的学生号,所以它不应该被链入链表中.所以应该让该结点的前一个结点的结构体指针置空.即:p2->next=NULL.此时结束了整个链表的建立.
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询