| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 761 人关注过本帖
标题:链表的使用
只看楼主 加入收藏
飞影王子
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-3-30
收藏
 问题点数:0 回复次数:2 
链表的使用
写了一个这样的程序,不知道有什么问题,请各位高手看一下了。
#include <malloc.h>
#include <string.h>

#define LEN sizeof(STU)

typedef struct student
  {
    char name[20];
    double score;
    int order;
    struct student *next;         
  }STU,*pstu;
  
pstu create(void);
void print( pstu);
void ordernum( pstu);
  
 main()  
 {
   pstu head=NULL;
   
   head=create();
   
  // print(head);
    getch();
           
 }
pstu create(void)
 {//建立链表
  int i=0;
  pstu head,p1,p2;
  char name[20][20];
  double score[20]={73.5,78.5,87,79,71,70,100};
  

  p1=(pstu)malloc(LEN);
   if(!p1)
    {
     printf("内存分配失败\n");
     exit(1);
     }
     
  head=p1;
  
  for( i=0;name[i]==0;i++)
   {
     p2=(pstu)malloc(LEN);
       if(!p2)
         {
           printf("内存分配失败\n");
           exit(1);   
         }
         
     printf("请输入姓名第%d个学生的姓名\n");
       gets(name[i]);
      
     strcpy(p2->name,name[i]);  
     p2->score=score[i];   
     p2->order=7;
    p1->next=p2;
    p1=p2;
    p2->next=NULL;
                 
   }
 //ordernum(head);//对学生的成绩进行排序
   
  return head;
     
 } //建立链表结束
 
void print(pstu head)
 {//输出链表中的数据
   pstu p1=head;
   p1=p1->next;
   int i=1;
  while(p1!=NULL)
    {
      printf("第%d学生的记录\n", i);
      printf(" name=%c \n",p1->name);
      printf(" score=%lf\n",p1->score);
      printf(" order=%d \n",p1->order);
      printf("\n");
      
      p1=p1->next;
      i++;         
    }
    getch();   
 }//输出链表结束
 
 void ordernum(pstu head)
  {//对学生成绩进行排序
    pstu p1=NULL,p2=NULL;
    int score=0;
   
  
  p1=head->next;
  p2=head->next;
  
  while(p1!=NULL)
    {
       score=p1->score;    //得到第一个学生的成绩
    while(p2!=NULL)
     {
      if(score>(p2->score))//比较两个学生的成绩
          p1->order--;     //如果p1的成绩小于p2的成绩
                           //那么P1的order减1
      p2=p2->next;
         
     }
 p1=p1->next;
 p2=head;
                       
 }
 
}
搜索更多相关主题的帖子: 链表 
2008-02-21 12:13
aprogram
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-15
收藏
得分:0 
一点小建议,写程序的时候一定要考虑扩展性
而且要在开始学程序的时候就养成这样的习惯

学C语言多年,如今才知道一事无成
2008-02-21 13:07
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
不想改了,还有一点逻辑上的问题..指针使用前要初始化的
#include <malloc.h>
#include <string.h>
#include<conio.h>
#include<stdio.h>

#define LEN sizeof(STU)

typedef struct student
  {
    char name[20];
    double score;
    int order;
    struct student *next;         
  }STU,*pstu;
  
pstu create(void);
void print( pstu);
void ordernum( pstu);
  
int main()  
{
   pstu head=NULL;
   
   head=create();
   
   print(head);
    getch();
 return 0;         
}
pstu create(void)
{//建立链表
  int i=0;
  pstu head,p1,p2;
  char name[20][20];
  double score[20]={73.5,78.5,87,79,71,70,100};
  

  p1=(pstu)malloc(sizeof(STU));
   if(!p1)
   {
     printf("内存分配失败\n");
   }
     
  head=p1;
  p1->next=NULL;
  
  for( i=0;i<7;i++)
   {
     p2=(pstu)malloc(sizeof(STU));
      if(!p2)
        {
          printf("内存分配失败\n");
        }
         
     printf("请输入姓名第%d个学生的姓名\n",i);
      gets(name[i]);
      fflush(stdin);
      
     strcpy(p2->name,name[i]);  
     p2->score=score[i];   
     p2->order=7;
     p1->next=p2;
     p1=p2;
     p2->next=NULL;
                 
   }
ordernum(head);//对学生的成绩进行排序
   
  return head;
     
} //建立链表结束

void print(pstu head)
{//输出链表中的数据
    int i=1;
   pstu p1=head;
   p1=p1->next;
  
  while(p1!=NULL)
    {
      printf("第%d学生的记录\n", i);
      printf(" name=%s \n",p1->name);
      printf(" score=%lf\n",p1->score);
      printf(" order=%d \n",p1->order);
      printf("\n");
      
      p1=p1->next;
      i++;         
    }
    getch();   
}//输出链表结束

void ordernum(pstu head)
  {//对学生成绩进行排序
    pstu p1=NULL,p2=NULL;
    double score=0;
   
  
  p1=head->next;
  p2=head->next;
  
  while(p1!=NULL)
    {
       score=p1->score;    //得到第一个学生的成绩
    while(p2!=NULL)
     {
      if(score>(p2->score))//比较两个学生的成绩
          p1->order--;     //如果p1的成绩小于p2的成绩
                           //那么P1的order减1
      p2=p2->next;
         
     }
p1=p1->next;
p2=head;
                       
}

}
2008-02-21 13:28
快速回复:链表的使用
数据加载中...
 
   



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

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