| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 914 人关注过本帖
标题:请教一个链表的问题
只看楼主 加入收藏
jbddd
Rank: 2
等 级:论坛游民
帖 子:45
专家分:24
注 册:2009-7-26
结帖率:87.5%
收藏
 问题点数:0 回复次数:12 
请教一个链表的问题

原本的思路是要按输入的学生的数量建立动态链表,然后打印出来但是 问题老报错

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[100];
    int number;
    struct student *next;
};
struct     student *h,*p1,*p2;      
struct student * Creat(int n)          \创建链表,根据输入的学生数量创建
{        int        i=1;
        int     temp=n;
        char    p3[100];
        int        num;
        h=p1=p2=NULL;
        for(;n>=0;n--)                \\输入的次数循环
    {
            if (h==NULL)             \\如果头指针是空的话,就创建一个空间,并使得p1=h
            {
                p1=(struct student *)malloc(sizeof(struct student));
                h=p1;
            }
            if (h!=NULL    &&    n>0) \\如果头指针不为空,则继续
            {
            printf("请输入学生%d的名字:",i);
              scanf("%s",p3);
              strcpy(p1->name,p3);
               printf("请输入学生%d的成绩:",i);
             scanf("%d",&num);
            p1->number=num;
            p1=(struct student *)malloc(sizeof(struct student));
            p2->next=p1;
            p2=p1;
            i++;
            }
            else
                p2->next=NULL;
    }
        return h;
}
void print(struct student * h) \\ 打印的函数
{
    struct student *p=h;
        do
        {
            printf("姓名:%s,成绩:%d\n",p->name,p->number);
            p=p->next;
        }
        while(p!=NULL);
}
int main()
{
    int n;
    struct student * h;
    printf("输入学生总人数:\n");
    scanf("%d",&n);
    h=Creat(n);
    print(h);
    return 0;
}


希望能解答 谢谢各位了啊


[ 本帖最后由 jbddd 于 2009-12-23 12:53 编辑 ]
搜索更多相关主题的帖子: 链表 
2009-12-23 01:11
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
描述清楚一点或许有人愿意看

我可好玩啦...不信你玩玩^_^
2009-12-23 04:54
perfectc
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2009-12-16
收藏
得分:0 
你把
for(;n>=0;n--)
    {
            if (h==NULL)
            {
                p1=(struct student *)malloc(sizeof(struct student));
                h=p1;
            }
            if (h!=NULL    &&    n>0)
            {
            printf("请输入学生%d的名字:",i);
              scanf("%s",p3);
              strcpy(p1->name,p3);
               printf("请输入学生%d的成绩:",i);
             scanf("%d",&num);
            p1->number=num;
            p1=(struct student *)malloc(sizeof(struct student));
            p2->next=p1;   
            p2=p1;        //这一句放到 printf("请输入学生%d的名字:",i);这句上面;;因为这时p2指向的是空地址没有NEXT
            i++;
            }
            else
                p2->next=NULL;
    }
测试可行


[ 本帖最后由 perfectc 于 2009-12-23 09:15 编辑 ]
2009-12-23 09:14
jbddd
Rank: 2
等 级:论坛游民
帖 子:45
专家分:24
注 册:2009-7-26
收藏
得分:0 
以下是引用pgy在2009-12-23 04:54:30的发言:

描述清楚一点或许有人愿意看
不好意思啊 可能是表达能力的问题
 这个程序的原本意图是想创建一个动态链表,然后根据输入的学生的数量,决定创建链表的节点的个数,但老出问题,运行起来没有问题,但是总是中途报错了,请指教~~
2009-12-23 12:50
jbddd
Rank: 2
等 级:论坛游民
帖 子:45
专家分:24
注 册:2009-7-26
收藏
得分:0 
以下是引用perfectc在2009-12-23 09:14:30的发言:

你把
for(;n>=0;n--)
    {
            if (h==NULL)
            {
                p1=(struct student *)malloc(sizeof(struct student));
                h=p1;
            }
            if (h!=NULL    &&  ...
p2指向的是即使是空地址,但是他也似乎是个结构体指针吧 按照大小的话是不是也可以指向NEXT呢??? 另外上面的代码替换了依旧错~~还是谢谢你


[ 本帖最后由 jbddd 于 2009-12-23 12:57 编辑 ]
2009-12-23 12:56
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:0 
你要注意书写规范,你的程序乱78糟的啊。要看懂你的意思得花一定的时间

qq7434391
2009-12-23 13:22
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:0 
首先你用到malloc函数要把#include<malloc.h>加上。还有我觉得你定义很多变量和数组我觉得是多于的。我改了一下,你看看能不能解决问题
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[100];
    int number;
    struct student *next;
};
struct student * Creat(int n)         /*创建链表,根据输入的学生数量?/
   {    struct student *h,*p1,*p2;
        h=p1=p2=NULL;
        for(;n>=0;n--)
                      /*输入的次数循环*/
         {
            if (h==NULL)             /*如果头指针是空的话,就创建一个空间,并使得p1=h*/
            {
                p1=(struct student *)malloc(sizeof(struct student));
                h=p1;
            }
            if (h!=NULL&&n>0) /*如果头指针不为空,则继?*/
            {
            printf("请输入学生%d的名字:");
              scanf("%s",p1->name);
            printf("请输入学生%d的成绩:");
              scanf("%d",p1->number);
            p2=p1;
            p1->next=(struct student *)malloc(sizeof(struct student));
            p1=p1->next;
            }
            else
                p2->next=NULL;
    }
        return h;
}
void print(struct student * h) /*打印的函数*/
{
    struct student *p=h;
        do
        {
            printf("姓名:%s,成绩:%d\n",p->name,p->number);
            p=p->next;
        }
        while(p!=NULL);
}
int main()
{
    int n;
    struct student * h;
    printf("输入学生总人数:\n");
    scanf("%d",&n);
    h=Creat(n);
    print(h);
    return 0;
}

qq7434391
2009-12-23 14:11
perfectc
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2009-12-16
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[100];
    int number;
    struct student *next;
};
struct     student *h,*p1,*p2;      
struct student * Creat(int n)          \创建链表,根据输入的学生数量创建
{        int        i=1;
        int     temp=n;
        char    p3[100];
        int        num;
        h=p1=p2=NULL;
        for(;n>=0;n--)                \\输入的次数循环
    {
            if (h==NULL)             \\如果头指针是空的话,就创建一个空间,并使得p1=h
            {
                p1=(struct student *)malloc(sizeof(struct student));
                h=p1;
            }
            if (h!=NULL    &&    n>0) \\如果头指针不为空,则继续
            {
             p2=p1;   \\放到这里
            printf("请输入学生%d的名字:",i);
              scanf("%s",p3);
              strcpy(p1->name,p3);
               printf("请输入学生%d的成绩:",i);
             scanf("%d",&num);
            p1->number=num;
            p1=(struct student *)malloc(sizeof(struct student));
            p2->next=p1;
            i++;
            }
            else
                p2->next=NULL;
    }
        return h;
}
void print(struct student * h) \\ 打印的函数
{
    struct student *p=h;
        do
        {
            printf("姓名:%s,成绩:%d\n",p->name,p->number);
            p=p->next;
        }
        while(p!=NULL);
}
int main()
{
    int n;
    struct student * h;
    printf("输入学生总人数:\n");
    scanf("%d",&n);
    h=Creat(n);
    print(h);
    return 0;
}


我用vc++6.0头文件不用加#include<malloc.h>也可以············还有为什么楼主注释是\\而不是//版本不同?
2009-12-23 17:25
jbddd
Rank: 2
等 级:论坛游民
帖 子:45
专家分:24
注 册:2009-7-26
收藏
得分:0 
以下是引用perfectc在2009-12-23 17:25:15的发言:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[100];
    int number;
    struct student *next;
};
struct     student *h,*p1,*p2;      
struct student * Creat(in ...
#include<stdlib.h>有了就不用再加malloc
笔误啊 不好意思啊
2009-12-24 00:03
jbddd
Rank: 2
等 级:论坛游民
帖 子:45
专家分:24
注 册:2009-7-26
收藏
得分:0 
以下是引用liangwenbc在2009-12-23 14:11:28的发言:

首先你用到malloc函数要把#include<malloc.h>加上。还有我觉得你定义很多变量和数组我觉得是多于的。我改了一下,你看看能不能解决问题
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h ...
问题还是有 一运行就崩溃了啊
2009-12-24 00:11
快速回复:请教一个链表的问题
数据加载中...
 
   



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

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