当前位置: 代码迷 >> C语言 >> 链表的使用
  详细解决方案

链表的使用

热度:140   发布时间:2008-02-21 12:13:58.0
链表的使用
写了一个这样的程序,不知道有什么问题,请各位高手看一下了。
#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;
                       
}

}
搜索更多相关的解决方案: 链表  

----------------解决方案--------------------------------------------------------
一点小建议,写程序的时候一定要考虑扩展性
而且要在开始学程序的时候就养成这样的习惯
----------------解决方案--------------------------------------------------------
不想改了,还有一点逻辑上的问题..指针使用前要初始化的
#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;
                       
}

}
----------------解决方案--------------------------------------------------------
  相关解决方案