j_able 2021-11-13 21:08 采纳率: 100%
浏览 107
已结题

数据结构 多关键字排序

编译OK但是控制台无法正确输出
是在dev里面运行的

#include<iostream>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#define MAX_NUM_OF_KEY 5
#define RADIX 101
#define MAX_SPACE 1000
using namespace std;
struct SLCell{
    int keys[MAX_NUM_OF_KEY];
    char name[20];
    int number;
    int next;
};
struct SLList{
    SLCell r[MAX_SPACE];
    int keynum;
    int recnum;
};
SLList*Creat()
{
    SLList*l;
    int i=1,flag=1;
    l=new SLList;
    l->keynum=5;
    l->recnum=0;
    while(flag)
    {
        cout<<"请输入考生考号,姓名,语文,数学,英语,综合"<<endl;
        cin>>l->r[i].number;
        cin>>l->r[i].name;
        cin>>l->r[i].keys[1];
        cin>>l->r[i].keys[2];
        cin>>l->r[i].keys[3];
        cin>>l->r[i].keys[4];
        l->r[i].keys[0]=(l->r[i].keys[1]+l->r[i].keys[2]+l->r[i].keys[3]+l->r[i].keys[4]);
        (l->recnum)++;
        cout<<"继续输入考生成绩则输入1,否则输入0"<<endl;
        cin>>flag;
        i++;
    }
    
}
void search(SLList*l)
{
    char name[20];
    int number;
    int i;
    int j;
    cout<<"按考号查找输入0,按姓名查找输入1"<<endl;
    cin>>j;
    switch(j)
    {
    case 0:
    cout<<"请输入考号"<<endl;
    cin>>number;
    for(i=1;i<=10;i++)
    {
        if(l->r[i].number==number)
        {
            cout<<"考号 名字 语文 数学 英语 综合"<<endl;
            cout<<setw(2)<<l->r[i].number<<endl;
            cout<<setw(10)<<l->r[i].name<<endl;
            cout<<setw(10)<<l->r[i].keys[1]<<endl;
            cout<<setw(10)<<l->r[i].keys[2]<<endl;
            cout<<setw(10)<<l->r[i].keys[3]<<endl;
            cout<<setw(10)<<l->r[i].keys[4]<<endl;
            
        }
    }
break;
case 1:
cout<<"请输入姓名"<<endl;
cin>>name;
for(i=1;i<=10;i++)
{
    if(strcmp(l->r[i].name,name)==0)
    {
        cout<<"考号 姓名 语文 数学 英语 综合"<<endl;
        cout<<setw(2)<<l->r[i].number<<endl;
        cout<<setw(10)<<l->r[i].name<<endl;
        cout<<setw(10)<<l->r[i].keys[1]<<endl;
        cout<<setw(10)<<l->r[i].keys[2]<<endl;
        cout<<setw(10)<<l->r[i].keys[3]<<endl;
        cout<<setw(10)<<l->r[i].keys[4]<<endl;
        
    }
}
break;            
    } 
    
}
void Distribute(SLCell*r,int i,int*f,int*e)
{
    int j,p;
    for(j=RADIX-1;j>=0;--j)
          f[j]=0;
    for(p=r[0].next;p;p=r[p].next)
    {
        j=r[p].keys[i];
        if(!f[j])
               f[j]=p;
        else
        r[e[j]].next=p;
        e[j]=p;
    }
}
void Collect(SLCell*r,int i,int*f,int*e)
{
    int j,t;
    for(j=RADIX-1;!f[j];j--);
    r[0].next=f[j];
    t=e[j];
    while(j>=0)
    {
        for(j--;j>0&&f[j];j--);
        if(f[j]&&j>=0)
        {
            r[t].next=f[j];
            t=e[j];
        }
    }
    r[t].next=0;
}
void RadixSortChinese(SLList*l)
{
    int f[101],e[101];
    int i;
    for(i=0;i<l->recnum;i++)
         l->r[i].next=i+1;
    l->r[l->recnum].next=0;
    for(i=3;i>0;--i)
    {
        Distribute(l->r,i,f,e);
        Collect(l->r,i,f,e);
    }
    
}
void RadixSortMaths(SLList*l)
{
    int f[101],e[101];
    int i;
    for(i=0;i<l->recnum;i++)
          l->r[i].next=i+1;
    l->r[l->recnum].next=i+1;
    for(i=1;i<3;++i)
    {
        Distribute(l->r,i,f,e);
        Collect(l->r,i,f,e);
    }    
          
}
void RadixsortEnglish(SLList*l)
{
    int f[101],e[101];
    int i;
    for(i=0;i<l->recnum;i++)
          l->r[i].next=i+1;
    l->r[l->recnum].next=i+1;
    for(i=1;i<4;++i)
    {
        Distribute(l->r,i,f,e);
        Collect(l->r,i,f,e);
    }    
          
}
void Radixsortzonghe(SLList*l)
{
    int f[101],e[101];
    int i;
    for(i=0;i<l->recnum;i++)
          l->r[i].next=i+1;
    l->r[l->recnum].next=i+1;
    for(i=1;i<5;++i)
    {
        Distribute(l->r,i,f,e);
        Collect(l->r,i,f,e);
    }    

}
void RadixSortTotal(SLList*l)
{
    SLCell*r;
    r=l->r;
    int f[401],e[401];
    int j,p,t;
    for(j=400;j>=0;--j)
         f[j]=0;
    for(p=r[0].next;p;p=r[p].next)
    {
        j=r[p].keys[0];
        if(!f[j])
              f[j]=p;
        else
              r[e[j]].next=p;
        e[j]=p;
    }
    for(j=400;!f[j];j--);
    r[0].next=f[j];
    t=e[j];
    while(j>=0)
    {
        for(j--;j>0&&!f[j];j--);
        if(f[j]&&j>=0)
        {
            r[t].next=f[j];
            t=e[j];
        }
    }
    r[t].next=0;
}
void ShowRank(SLList*l)
{
    int rank=1,i;
    cout<<"名次 考号 名字 总分 语文 数学 英语 综合"<<endl;
    for(i=l->r[0].next;rank<=l->recnum;rank++)
    {
        cout<<setw(2)<<rank<<endl;
        cout<<setw(10)<<l->r[i].number<<endl;
        cout<<setw(10)<<l->r[i].name<<endl;
        cout<<setw(10)<<l->r[i].keys[0]<<endl;
        cout<<setw(10)<<l->r[i].keys[1]<<endl;
        cout<<setw(10)<<l->r[i].keys[2]<<endl;
        cout<<setw(10)<<l->r[i].keys[3]<<endl;
        cout<<setw(10)<<l->r[i].keys[4]<<endl;
        i=l->r[i].next;
        
     } 
}
void RadixSort(SLList*l)
{
              int x,k=1;
              while(k!='0')
              {
                        cout<<"********************************"<<endl;
                        cout<<"***你可以选择一下几种操作:  ***"<<endl;
                        cout<<"***1.总分相同时按语文成绩排序***"<<endl;
                        cout<<"***2.总分相同时按英语成绩排序***"<<endl;
                        cout<<"***3.总分相同时按数学成绩排序***"<<endl;
                        cout<<"***4.总分相同时按综合成绩排序***"<<endl;
                        cout<<"***5.退出                    ***"<<endl;
                        cout<<"********************************"<<endl;
                        cout<<"请输入你选择的操作:"<<endl;
                      cin>>x;
                      switch(x)
                      {
                          case 1:
                          RadixSortChinese(l);
                          RadixSortTotal(l);
                          cout<<"考生成绩已按您的选择排序成功"<<endl;
                          ShowRank(l);
                          break;
                          case 2:
                          RadixSortMaths(l);
                          RadixSortTotal(l);
                          cout<<"考生成绩已按您的选择排序成功"<<endl;
                          ShowRank(l);
                          break;
                          case 3:
                          RadixsortEnglish(l);
                          RadixSortTotal(l);
                          cout<<"考生成绩已按您的选择排序成功"<<endl;
                          ShowRank(l);
                          break;
                          case 4:
                          Radixsortzonghe(l);
                          RadixSortTotal(l);
                          cout<<"考生成绩已按您的选择排序成功"<<endl;
                          ShowRank(l);
                          break;
                          case 5:
                          return ;
                          break;
                          
                    }
                        
                        system("pause");
                        system("cls");
                         
              }
}
int main()
{int x,falg=1;
SLList*L; 
while(falg!=0){
        cout<<"******欢迎使用多关键字排序系统*****\n"<<endl;
        cout<<"***手动输入考生成绩进行排序请选***1\n"<<endl;
        cout<<"********查询考生信息请选择********2\n"<<endl;
        cout<<"********排序考生信息请选择********3\n"<<endl;
        cout<<"*****显示排序后考生信息请选择*****4\n"<<endl;
        cout<<"************退出请选择************5\n"<<endl;
cin>>x;
switch(x)
{case 1:
     L=Creat();
     break;
 case 2:
     search(L);
     break;
 case 3:
     RadixSort(L);
     break;    
 case 4:
     ShowRank(L);
     break;    
 case 5:
     return 0;
     break;
}
system("pause");
system("cls");
}
cout<<"按任意键继续操作"<<endl; 
system("cls");
return 0;
}

img

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-13 21:12
    关注

    麻烦用代码块格式化一下代码好吧,这实在是没法看啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 修改了问题 11月13日
  • 修改了问题 11月13日
  • 展开全部

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加