| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 449 人关注过本帖
标题:关于建立动态链表的问题
只看楼主 加入收藏
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
结帖率:87.5%
  已结贴   问题点数:10  回复次数:7   
关于建立动态链表的问题
先上代码
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct student)
struct student
{
        int num;
        float score;
        struct student *next;
};
int n;

int main(void)
{
        
        struct student *creat(void);             //声明建立链表的函数
        void print(struct student *);           //声明输出链表的函数
        struct student *head;
        head = creat();                           //调用create函数
        print(head);                             //调用print函数
        system("pause");
        return 0;
}

struct student *creat(void)               //定义建立链表的函数
{
        struct student *head = NULL, *p1 = NULL, *p2 = NULL;
        p1 = p2 = (struct student *)malloc(LEN);
        printf("please input the num : ");
        scanf("%d", &(p1 -> num) );
        printf("please input score : ");
        scanf("%f", &(p1 -> score));
        n = 0;
        while (0 != p1 -> num)
        {
                n++;
                if (1 == n)
                {
                        head = p1;
                }
                else
                {
                        p2->next = p1;
                }
                        p2 = p1;
                        p1 = (struct student *)malloc(LEN);
                        printf("please input the num : ");
                        scanf("%d", &(p1->num));
                        printf("please input score : ");
                        scanf("%f", &(p1->score));        
        }
        p2->next = NULL;
        return head;
}

void print(struct student *head)             //定义输出链表的函数
{
        struct student *p;
        p = head;
        while (0 != p -> num)
        {
                printf("成员%d的分数为%f\n", p -> num, p -> score);
                p = p->next;
        }
}



每次输出完后,都会出现这个对话框。忘了说题目要求如果输入的num的值为0时,则表示建立链表的过程结束,该节点不连接到链表中


[ 本帖最后由 firewater 于 2015-3-16 19:09 编辑 ]
附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: color  动态  
2015-03-16 10:23
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2786
专家分:14619
注 册:2014-10-16
  得分:0 
运行没错啊

一片落叶掉进了回忆的流年。
2015-03-16 11:08
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 2楼 诸葛欧阳
请问你的是哪个版本的IDE,我的是vs2013,难道不同版本会报错?
2015-03-16 11:17
glan
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2015-3-10
  得分:1 
你的打印函数有问题
void print(struct student *head)             //定义输出链表的函数
{
        struct student *p;
        p = head;
        while (0 != p )                       //p不等于0, 不是p-> num不等于0
        {
                printf("成员%d的分数为%f\n", p -> num, p -> score);
                p = p->next;
2015-03-16 13:19
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 4楼 glan
忘了说题目了,题目要求如果输入的num的值为0时,则表示建立链表的过程结束,该节点不连接到链表中
2015-03-16 19:08
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 4楼 glan
改了之后就可以了,为什么?
2015-03-16 21:25
glan
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2015-3-10
  得分:9 
回复 5楼 firewater
你的题目要求已在这个函数中实现了
struct student *creat(void);

在你打印函数中在打印最后一个链表时 p->next = UNLL;  之后把p = p->next;这时p为空哪来的 p -> num自然会出错。
2015-03-17 09:20
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 7楼 glan
明白了,多谢提醒啊
2015-03-17 13:14







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

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