| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:链表的问题,望大家找找错误。
只看楼主 加入收藏
zhangxingjun
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
链表的问题,望大家找找错误。
#include<stdio.h>

#include<stdlib.h>
typedef struct LNode
{
 int number;
 char name[10];
 double mathstore;
 struct LNode *next;
}LNode,*Linklist;


Linklist createlist(int n);
int main()
{   int n;  
printf("请输入需要输入的学生人数:\n");
     scanf("%d",&n);
createlist(n);
return 0;

}

Linklist createlist(int n)
{
    Linklist L,cur;
LNode *p;
char ch;int j=0;
 L=(Linklist)malloc(sizeof(LNode));
 L->next=0;   //建一个空表。
 for(int i=n;i>0;i--)
        {
p=(Linklist)malloc(sizeof(LNode));//生成新节点。
 printf("请输入学生的学号:\n");
     scanf("%d",&p->number);
     printf("请输入该生的姓名:\n");
     ch=getchar();
        while(ch!='\n')
     {
   
         scanf("%c",p->name[j]);
            j++;
         ch=getchar();
     }
        p->name[j]='\0';
     printf("请输入该生的数学成绩:\n");
     scanf("%lf",&p->mathstore);
           L=cur;
          p->next=cur->next;
         cur->next=p;
 }
 


return L;

}                                                                                                                                                                                                                                                                                                                                                                                                                                                            
搜索更多相关主题的帖子: include double number return 
2011-10-03 08:43
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:5 
L->next=0;   //建一个空
不能用”0“表示,用NULL,
这里一错后面全错。
scanf("%d",&p->number);
p本来就是一个指针,这里你用的运算符"&"和"->"是不行的。
后面还有很多错啊,先理解清概念吧。
2011-10-03 11:01
zhangxingjun
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-9
收藏
得分:0 
回复 2楼 cosam
p->numble,不是number里面的数吗?是个地址?把&去了可否,我刚学数据结构,还有c语言的知识有点模糊,望大侠指点一二
2011-10-03 11:17
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
去了&应当可以的。
主要这里不关数据结构的事,这些都是结构体的知识。
数据结构只是用我们学过的程序知识来构建一个有组织的存储方式,他有他的算法。
楼主的链表结构算法方法是知道的,只是基本的语法与用法不熟练。
2011-10-03 11:37
zhangxingjun
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-9
收藏
得分:0 
回复 4楼 cosam
这个程序编译没问题  ,运行的时候有错误 ,找个例子试一下不行呢,找不到什么原因,急死我了 ,我看着和课本上的没什么区别啊,咋不行呢,帮忙查查,
在此谢过
2011-10-03 12:09
西邮张会业
Rank: 2
来 自:吉林省松原市
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-9-27
收藏
得分:5 
你想用头插法,还是尾插法啊?
2011-10-03 16:06
mengcan555
Rank: 4
等 级:业余侠客
帖 子:104
专家分:253
注 册:2011-9-17
收藏
得分:5 
#include<stdio.h>

#include<stdlib.h>
typedef struct LNode
{
int number;
char name[10];
double mathstore;
struct LNode *next;
}LNode,*Linklist;


Linklist createlist(int n);
int main()
{   int n;  
printf("请输入需要输入的学生人数:\n");
     scanf("%d",&n);
createlist(n);
return 0;

}

Linklist createlist(int n)
{
    Linklist L,cur;
LNode *p;
char temp,ch;int j=0;
L=(Linklist)malloc(sizeof(LNode));
cur=(Linklist)malloc(sizeof(LNode));
L->next=NULL;   //建一个空表。
for(int i=n;i>0;i--)
{
p=(Linklist)malloc(sizeof(LNode));//生成新节点。
printf("请输入学生的学号:\n");
     scanf("%d",&p->number);
     printf("请输入该生的姓名:\n");
     temp=getchar();
     ch=getchar();
        while(ch!='\n')
     {
   
         scanf("%c",&p->name[j]);
            j++;
         ch=getchar();
     }
        p->name[j]='\0';
     printf("请输入该生的数学成绩:\n");
     scanf("%lf",&p->mathstore);
           L->next=p;
           p->next=cur;
           cur=p;
           
           
}



return L;

}              
2011-10-03 16:12
mengcan555
Rank: 4
等 级:业余侠客
帖 子:104
专家分:253
注 册:2011-9-17
收藏
得分:0 
尾插法的程序如下::


#include<stdio.h>

#include<stdlib.h>
typedef struct LNode
{
    int number;
    char name[10];
    double mathstore;
    struct LNode *next;
}LNode,*Linklist;


Linklist createlist(int n);
void print_list(Linklist l);
int main()
{
    int n;  
    printf("请输入需要输入的学生人数:\n");
    scanf("%d",&n);
   
    print_list(createlist(n));
    return 0;
}

Linklist createlist(int n)
{
    Linklist L,cur;
    LNode *p;
    char temp,ch;
    int j=0;
    L=(Linklist)malloc(sizeof(LNode));
    cur=(Linklist)malloc(sizeof(LNode));
    L->next=NULL;   //建一个空表。

    cur=L; //cur初始化指向最后一个元素,尾插法

    for(int i=n;i>0;i--)
    {
        p=(Linklist)malloc(sizeof(LNode));//生成新节点。
        
        printf("请输入学生的学号:\n");
        scanf("%d",&p->number);        

        printf("请输入该生的姓名:\n");
        //temp=getchar();
        getchar();//接收上一次输入的回车符号
        ch=getchar();

        j=0; // j循环初始化
        while(ch!='\n')
        {
            //scanf("%c",&p->name[j]);
            p->name[j]=ch;
            j++;
            ch=getchar();
        }
        p->name[j]='\0';

        printf("请输入该生的数学成绩:\n");
        scanf("%lf",&p->mathstore);

        p->next=NULL;

        cur->next = p;        

        //L->next=p;
        //p->next=cur;
        cur=p;
    }
    return L;
}                  

void print_list(Linklist l)
{
    l=l->next;
    while(l)
    {
        printf("name:%s,number:%d,mathstore:%2.2lf\n",l->name,l->number,l->mathstore);
        l=l->next;
    }
   
}
2011-10-03 18:51
liuxuewen77
Rank: 2
来 自:广东
等 级:论坛游民
帖 子:10
专家分:12
注 册:2011-10-3
收藏
得分:5 
``````````````
2011-10-03 22:36
zhangxingjun
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-9
收藏
得分:0 
回复 8楼 mengcan555
怎样把打印的函数和输入的函数分开啊,就是弄两个子函数,举个例子说,在主函数里边弄个switch语句,选择1的话就输入,选择2 的话就输出,
因为这个程序,还有插入和删除,这是我自己弄得,请大侠看看,问题好多额



程序的目的是输入,打印,插入,删除学生信息,我写的那个插入还有删除不能编译,高手给我调试一下,谢谢了



 #include<stdio.h>
 #include<stdlib.h>
  #define Null 0
  typedef struct LNode
  {
    int number;
    char name[10];
    double mathstore;
    struct LNode *next;
  }LNode,*Linklist;
  typedef struct STU
  {
   
  int number;
    char name[10];
    double mathstore;
  
  }STU;
Linklist createlist(int n);
void print_list(Linklist l);
void InsertList(LNode *L,struct STU t,int i);
void DeleteList(LNode *L,int i);
int n,i;  
STU t;
int main()
{
    int x;
    Linklist l;
   
    printf("\n\n**********************************学生信息管理系统******************************\n");
    printf("选项如下:\n");
    printf("1、录入学生信息:\n");
    printf("2、打印学生信息:\n");
    printf("3、添加新生信息:\n");
    printf("4、删除学生信息:\n");

    while(x!=-1)
    {Linklist w;
   
     scanf("%d",&x);
        switch(x)
     {
     case 1:printf("请输入需要输入的学生人数:\n");
            scanf("%d",&n);
         createlist(n);break;
     case 2:w=createlist(n);
         print_list(w);break;
     case 3:InsertList(l,t,i);break;
     case 4:DeleteList(l,i);break;

    }
   printf("请继续选择输入:\n");

    }
    printf("输入错误!!\n");
    return 0;

}

Linklist createlist(int n)
{
    Linklist L,cur;
    LNode *p;
    char ch;
    int j=0;
    L=(Linklist)malloc(sizeof(LNode));
    cur=(Linklist)malloc(sizeof(LNode));
    L->next=NULL;   //建一个空表。

    cur=L; //cur初始化指向最后一个元素,尾插法

    for(int i=n;i>0;i--)
    {
        p=(Linklist)malloc(sizeof(LNode));//生成新节点。
        
        printf("请输入学生的学号:\n");
        scanf("%d",&p->number);        

        printf("请输入该生的姓名:\n");
        
        getchar();//接收上一次输入的回车符号
        ch=getchar();

        j=0; // j循环初始化
        while(ch!='\n')
        {
            //scanf("%c",&p->name[j]);
            p->name[j]=ch;
            j++;
            ch=getchar();
        }
        p->name[j]='\0';

        printf("请输入该生的数学成绩:\n");
        scanf("%lf",&p->mathstore);

        p->next=NULL;

        cur->next = p;        

      
        
        cur=p;
    }
    return L;
}                  

void print_list(Linklist l)
{
    l=l->next;
       printf("        数学成绩表\n");
    printf("学号\t姓名\t数学成绩\n");
    while(l)
    {
        printf("%d,%s,%2.2lf\n",l->number,l->name,l->mathstore);
        l=l->next;
    }
   
}






void InsertList(Linklist l, STU t,int i)
{
Linklist pre,s,p;
int j;
p=l->next;
pre=l;
j=p->number;

printf("请输入需要插入的学生学号:\n");
scanf("%d",&i);
while(pre!=NULL && j<i-1 )
{pre=pre->next;
j++;
}
if((j!=i-1)||(pre==NULL))
{printf("\n no posstion Error\n");return;}
s=(Linklist)malloc(sizeof(LNode));
printf("依次输入学生的学号,姓名,数学成绩:\n");
scanf("%d%s%lf",&t.number,t.name,&t.mathstore);
s->number=t.number;
//s->name=t.name;
s->mathstore=t.mathstore;
s->next=pre->next;
pre->next=s;
}




        
void DeleteList(Linklist l,int i)//i为学号;

{Linklist pre,r;
int j;
j=0;
pre=l;
printf("请输入需要删除的学生学号:\n");
scanf("%d",&i);
while(pre->next!=NULL && j<i-1)
{pre=pre->next;
j++;
}
if((j!=i-1)||(pre->next=NULL) )
{printf("\nPostion Error\n");return;}
r=pre->next;
pre->next=r->next;
free(r);
}
2011-10-04 11:38
快速回复:链表的问题,望大家找找错误。
数据加载中...
 
   



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

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