| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 675 人关注过本帖
标题:[求助]数据结构设计中的个问题
只看楼主 加入收藏
liujiesmart
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-6-27
收藏
 问题点数:0 回复次数:2 
[求助]数据结构设计中的个问题
下面是源码
我运行的时候到 第三部 输入学生的成绩后,回车就出现 内存不能written的错误  
  多关键字的排序有其一定的实用范围。例如,在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按单科分数排出考生录取的次序。   
  [基本要求]   
  (1)假设待排序的记录数不超过1000,表中记录的关键字数不超过5,各个关键字的范围均为0-100。按用户给定的关键字的优先关系,输出排序结果。   
  (2)约定按LSD法进行多关键字的排序。在对各个关键字排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用“分配”和“收集”的方法(如同基数序)。
多关键字排序
#include<math.h>   
  #include<string.h>   
  #include<stdio.h>   
  #include<stdlib.h>   
  #include<malloc.h>   
  #define   Null   0   
  #define   r   101   
  typedef   struct   node   
  {   
    int   k[6];   
    struct   node   *next;   
    char   name;   
  }Rnode,*Rlink;   
  void   Radixsort(Rlink   F,int   gs)/*基数排序*/   
  {   
    Rlink   p,t,f[r],e[r];   
    int   i,j;   
    if(F->next==Null)return;   
    for(i=gs;i>=1;i--)   
    {   
      for(j=0;j<=r;j++)   
          f[j]=Null;   
      p=F->next;   
      while(p)   
      {   
        j=p->k[i];   
        if(f[j]==Null)f[j]=p;   
        else   e[j]->next=p;   
        e[j]=p;   
        p=p->next;   
      }   
      for(j=0;!f[j];j++)   
          F->next=f[j];   
      t=e[j];   
      while(j<r)   
      {   
        j++;   
        if(f[j])   
        {   
          t->next=f[j];   
          t=e[j];   
        }   
      }   
      t->next=Null;   
    }   
  }   
  void   Linsertsort(Rnode   *L,int   i)   
  {   
    Rlink   p,q,s,u;   
    p=L->next;   
    L->next=Null;   
    while(p)   
    {   
      s=L;q=L->next;   
      while(q&&q->k[i]<=p->k[i])   
      {   
        s=q;q=q->next;   
      }   
      u=p->next;   
      p->next=q;   
      s->next=p;   
      p=u;   
      i--;   
      while(i>=1)   
      Linsertsort(L,i);   
    }   
  }   
  int   initl(Rnode   *head)/*建立空表*/   
  {   
    head=(Rnode*)malloc(sizeof(Rnode));   
    if(head==Null)return   0;   
    head->next=Null;   
    return   1;   
  }   
  int   Great(Rnode   *head,Rnode   a[],int   n,int   nu)/*建立链表*/   
  {   
    Rnode   *p,*s;   
    int   j,i;   
    if(initl(head)==0)return   0;   
    p=head;   
    for(j=0;j<=n-1;++j)   
    {   
      if((s=(Rnode*)malloc(sizeof(Rnode)))==Null)return   0;   
      for(i=1;i<=nu;i++)   
      s->k[i]=a[i].k[i];   
      s->name=a[i].name;   
      s->next=Null;   
      p->next=s;   
      p=s;   
    }   
    return   1;   
  }   
  main()   
  {   
    int   num,i,numb,War;   
    Rnode   b[1000];Rlink   LB;   
  
    printf("\nPlease   choose   the   way   of   problem:");/*选择方法*/   
    scanf("%d",&War);   
    printf("\nPlease   input   the   number   of   student(<=1000):");   
    scanf("%d",&num);   
    printf("\nPlease   input   the   number   of   school   subject   course(<=5):");   
    scanf("%d",&numb);   
    for(i=1;i<=num;i++)   
    {   
        printf("\nPlease   input   the   name   of   student%d:",i);   
        getchar();
        scanf("%c",&b[i].name);   
      if(numb>=1)   
        {   
          printf("\nPlease   input   the   first   important   scorce:");   
          scanf("%d",&b[i].k[1]);   
        }   
      if(numb>=2)   
        {   

          printf("\nPlease   input   the   second   important   scorce:");   
          scanf("%d",&b[i].k[2]);   
        }   
      if(numb>=3)   
        {   
          printf("\nPlease   input   the   third   important   scorce:");   
          scanf("%d",&b[i].k[3]);   
        }   
      if(numb>=4)   
        {   
          printf("\nPlease   input   the   fourth   important   scorce:");   
          scanf("%d",&b[i].k[4]);   
        }   
      if(numb>=5)   
        {   
          printf("\nPlease   input   the   fifth   important   scorce:");   
          scanf("%d",b[i].k[5]);   
        }   
    }   
    Great(LB,b,num,numb);   
    while(War==1)   
    {   
      Radixsort(LB,numb);   
      for(i=0;i<num;i++)   
      {   
        printf("\nThe   result   is   number   %d:   %s",i+1,LB->name);   
        LB=LB->next;   
      }   
    }   
    while(War==2)   
    {   
      Linsertsort(LB,numb);   
      for(i=0;i<num;i++)   
      {   
        printf("\nThe   result   is   number   %d:   %s",i+1,LB->name);   
        LB=LB->next;   
      }   
    }   
  }
搜索更多相关主题的帖子: 数据结构 设计 
2008-06-27 10:13
liujiesmart
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-6-27
收藏
得分:0 
那位大神
帮我把这程序弄完美
这是我们的设计
很重要 也很急
2008-06-27 10:15
liujiesmart
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-6-27
收藏
得分:0 
2008-06-27 21:50
快速回复:[求助]数据结构设计中的个问题
数据加载中...
 
   



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

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