当前位置: 代码迷 >> C语言 >> [求助]数据结构设计中的内存不能written的问题
  详细解决方案

[求助]数据结构设计中的内存不能written的问题

热度:548   发布时间:2008-06-27 10:33:24.0
[求助]数据结构设计中的内存不能written的问题
我运行的时候到 第三部 输入学生的成绩后,回车就出现 内存不能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;   
      }   
    }   
  }
搜索更多相关的解决方案: 数据结构  内存  written  设计  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-27 02:51:09
liujiesmart

等 级:新手上路
帖 子:11
专家分:0
注 册:2008-6-27
  得分:0 
大哥
能帮我改下吗?
在贴上来新的程序
谢谢了
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------