VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 398|回复: 4

[求助] 链表

[复制链接]
59_avatar_middle
在线会员 chenhaiyuan 发表于 2018-4-13 17:10:45 | 显示全部楼层 |阅读模式
10驿站币
有几个点不太懂求大佬解释。
include<stdio.h>
        struct employee
        {
                int no;
                char name[20];
                struct employee *next;
        };
        int main()                                                        
        {                                                                  
                int n;
                char ch[20];
                printf("n=");
                scanf_s("%d\n", &n);
                struct employee *head, *pt, *pn;
                int i = 1;
                pn = (struct employee *)malloc(sizeof(struct employee));
                head = pn;
                pt = pn;
                printf("input no and name of %d employee \n", i);
                gets_s(pn->name, 20);                                                
                gets_s(ch, 4);                                                         
                pn->no = atoi(ch);                                                      
                pn->next = NULL;                                                                                                         //pn->next这里原本不就是空的吗?
                printf("no=%d, name=%s\n", pn->no, pn->name);
                for (i = 2; i <= n; i++)
                {
                        pn = (struct employee *)malloc(sizeof(struct employee));                                //这里是说重新分配一个内存空间给pn?                                      
                        printf("input no and name of %d employee \n", i);
                        gets_s(pn->name, 20);                                       
                        gets_s(ch, 4);
                        pn->no = atoi(ch);
                        pn->next = NULL;                                                                                                
                        pt->next = pn;
                        pt = pn;                                                                                                   //这个赋值是指什么?
                        printf("no=%d, name=%s\n", pn->no, pn->name);
                }
                while (1);
                return 0;                                                     
        }

最佳答案

查看完整内容

1、pn->next = NULL; //pn->next这里原本不就是空的吗? 谁说原本就是空的,本身 employee 是个结构体类型,默认malloc出来的对象你也没有memset清空的操作,next 为什么会是空呢?只是会指向一个随机的值,所以这里面要清空下! 2、pn = (struct employee *)malloc(sizeof(struct employee)); //这里是说重新分配一个内存空间给pn? 刚才malloc的是链表的第一个节点,这里面malloc实际上是链表的第二个节点,以此类推,以后 ...




上一篇:VC的HTTP读取XML全是乱码
下一篇:windows自定义的类型后缀 _PTR作用

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-4-13 17:10:46 | 显示全部楼层
1、pn->next = NULL; //pn->next这里原本不就是空的吗?
谁说原本就是空的,本身 employee 是个结构体类型,默认malloc出来的对象你也没有memset清空的操作,next 为什么会是空呢?只是会指向一个随机的值,所以这里面要清空下!

2、pn = (struct employee *)malloc(sizeof(struct employee));  //这里是说重新分配一个内存空间给pn?
刚才malloc的是链表的第一个节点,这里面malloc实际上是链表的第二个节点,以此类推,以后可能还有第三个,第四个节点,每个节点都要malloc,所以就是这个意思了。

3、pt = pn; //这个赋值是指什么?
刚刚都说了,是一个链表,既然是链表就应该用 next 指针把各个节点都连接起来。所以 pt->next = pn; 这句就是这个意思了。但是 pt = pn; 这句的意思就是让 pn 永远指向的是当前节点,pt 永远指向的是 pn 的上一个节点,这样才能使用 pt->next = pn;

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

59_avatar_middle
ico_lz  楼主| chenhaiyuan 发表于 2018-4-13 20:55:21 | 显示全部楼层
Syc 发表于 2018-4-13 17:50
1、pn->next = NULL; //pn->next这里原本不就是空的吗?
谁说原本就是空的,本身 employee 是个结构体类型 ...

了解,这里pn->next赋值NULL,结尾将pt=pn;不会将pt->next变为NULL吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-13 22:03:22 | 显示全部楼层
chenhaiyuan 发表于 2018-4-13 20:55
了解,这里pn->next赋值NULL,结尾将pt=pn;不会将pt->next变为NULL吗?

他们根本就不是一个结点啊,不影响的

点评

好的。谢谢。  发表于 2018-4-13 22:04

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-9-24 20:16

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表