标题:p2->next指向p1,p2又指向p1(p2和p1不是在一起吗),然后p1又指向一个新开 ...
取消只看楼主
新手714
Rank: 1
等 级:新手上路
帖 子:50
专家分:3
注 册:2020-4-25
结帖率:88.89%
已结贴  问题点数:20 回复次数:2 
p2->next指向p1,p2又指向p1(p2和p1不是在一起吗),然后p1又指向一个新开辟的空间,这样p2跟过来了?,输入数据后,
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student
{    long num;
    float score;
    struct Student*next;
};
int n;     //n为全局变量,本文件模块中各函数均可使用它
struct Student *creat(void)
//定义函数。此函数返回一个指向链表头的指针
{    struct Student *head;
    struct Student *p1,*p2;
    n=0;
    p1=p2=(struct Student*) malloc(LEN);  //开辟一个新单元
    scanf("%ld,%f",&p1->num,&p1->score);
    //输入第1个学生的学号和成绩
    head=NULL;
    while(p1->num!=0)
    {    n=n+1;
        if(n==1) head=p1;
        else p2->next=p1;                                //p2->next指向p1,p2又指向p1(p2和p1不是在一起吗),然后p1又指向一个新开辟的空间,这样p2跟过来了?,输入数据后,
        p2=p1;                                      新空间的next是NULL,返回值是NULL???这样是怎么输出第一个的data吗?怎么这么糊呢?理解过程哪里不对吗???///
        p1=(struct Student*)malloc(LEN);
        //开辟动态存储区,把起始地址赋给p1
        scanf("%ld,%f",&p1->num,&p1->score);
        //输入其他学生的学号和成绩
    }
    p2->next=NULL;
    return(head);
}
int main()
{    struct Student *pt;
    pt=creat();     //函数返回链表第一个结点的地址
    printf("\nnum:%ld\nscore:%5.1f\n",pt->num,pt->score);
    //输出第1个结点的成员值
    return 0;
};
搜索更多相关主题的帖子: Student 指向 输入 next struct 
2020-05-23 16:58
新手714
Rank: 1
等 级:新手上路
帖 子:50
专家分:3
注 册:2020-4-25
得分:0 
回复 2楼 fulltimelink
head怎么也指向首节点,不是只有p1p2吗,然后不是p1p2都指向了新空间吗,然后在else的情况下,p2的尾结点不也是p1的么,而且不是p2尾结点指向了p1么,为什么还要把p1的地址赋给p2???
2020-05-23 18:47
新手714
Rank: 1
等 级:新手上路
帖 子:50
专家分:3
注 册:2020-4-25
得分:0 
回复 5楼 wmf2014
刚又看了一遍问题感觉自己没用脑子思考可能用的是眼睛吧,,,不过还是有点难的。假如用这些代码形成链表,再添加一个输出的函数,用p=p->next时next确定是包含了下一节点的地址吗?因为p1p2一直在变 就是p1p2在换结点,指向了下一结点后,地址是怎么存在next里,难道它保留了?什么原理呢?
2020-05-23 23:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501762-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.539734 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved