| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:运行出错,求大神帮忙改
只看楼主 加入收藏
心梦无痕1
Rank: 2
等 级:论坛游民
帖 子:6
专家分:27
注 册:2015-12-17
收藏
 问题点数:0 回复次数:0 
运行出错,求大神帮忙改
#include <stdio.h>
#include <string.h>
#define MaxSpace 100
#define keylen 7  
#define RADIX_n 10
#define RADIX_c 26
typedef char KeyType;
typedef struct  
{  
    char start[6];      //起点
    char end[6];      //终点
    char sche[10];    //班期  
    char time1[5];    //起飞时间
    char time2[5];    //到达时间
    char model[4];   //机型
    int price;        //票价  
}InfoType;       //航班记录类型
typedef struct
{  
    KeyType keys[keylen];    //关键字(航班号)
    InfoType others;
    int next;  
}SLNode;                //静态链表结点类型
typedef struct
{  
    SLNode sl[MaxSpace];     //静态链表,s1[0]为头结点
    int keynum;            //记录当前关键字字符个数
    int length;             //当前表长  
}SLList;                //静态链表类型  
typedef int ArrType_n[RADIX_n];  //十进制数字指针数组
typedef int ArrType_c[RADIX_c];  //26个字母指针数组
// 一趟数字字符分配函数
void Distribute(SLNode *sl,int i,ArrType_n f,ArrType_n e)
{  
    int j,p;  
    for(j=0;j<RADIX_n;j++)
    {   //各子表置为空表
        f[j]=e[j]=0;
    }
    for(p=sl[0].next;p;p=sl[p].next)
    {  
        j=sl[p].keys[i]%48;    //将数字字符转换成相对应的数值型数字
        if(!f[j])
            f[j]=p;
        else  
            sl[e[j]].next=p;  
        e[j]=p;            //将p指向的结点插入到第j个子表中
    }
}
// 一趟数字字符的收集函数  
void Collect(SLNode *sl,int i,ArrType_n f,ArrType_n e)
{
    int j,t;  
    for(j=0;!f[j];j++)     //找第一个非空子表  
    sl[0].next=f[j];      //s1[0].next指向第一个非空子表中的一个结点
    t=e[j];  
    while(j<RADIX_n-1)
    {  
        for(j=j+1;j<RADIX_n-1&&!f[j];j++)     //找下一个非空子表
            if(f[j])
            {  
                sl[t].next=f[j];  t=e[j];
            }           //链接两个非空子表
    }  
    sl[t].next=0;           //t指向最后一个非空子表中的最后一个结点
}
// 一趟字母字符分配函数  
void Distribute_c(SLNode *sl,int i,ArrType_c f,ArrType_c e)
{  
    int j,p;  
    for(j=0;j<RADIX_c;j++)
        { //各子表置为空表
            f[j]=e[j]=0;
        }  
    for(p=sl[0].next;p;p=sl[p].next)
        {  
            j=sl[p].keys[i]%65;   //将字母字符转换成在字母集中相应的序号(0-25)
            if(!f[j])
                f[j]=p;
            else
                sl[e[j]].next=p;
            e[j]=p;
        }
}  
// 一趟字母字符收集  
void Collect_c(SLNode *sl,int i,ArrType_c f,ArrType_c e)
{
    int j,t;  
    for(j=0;!f[j];j++);
        sl[0].next=f[j];
    t=e[j];  
    while(j<RADIX_c-1)
        {  
            for(j=j+1;j<RADIX_c-1&&!f[j];j++);
                if(f[j])
                    {
                        sl[t].next=f[j];
                        t=e[j];  
                    }
        }  
    sl[t].next=0;
}  
//链式基数排序函数
void RadixSort(SLList L)//链式 删除了一个&
{
    int i;  
    ArrType_n fn,en;
    ArrType_c fc,ec;  
    for(i=0;i<L.length;i++)  
        L.sl[i].next=i+1;           //0号单元仅存放指针,不存储内容
        L.sl[L.length].next=0;       //将普通的线性表改造为静态链表
    for(i=L.keynum-1;i>=2;i--)  
        { //按最低位优先次序对各关键字进行分配和收集,先做低4位数字部分
            Distribute(L.sl,i,fn,en); Collect(L.sl,i,fn,en);
        }  
    for(i=1;i>=0;i--)  
        { //对高位的2位大写字母进行分配和收集
            Distribute_c(L.sl,i,fc,ec);
            Collect_c(L.sl,i,fc,ec);
        }
}
//按指针链重新整理静态链表  
void Arrange(SLList L)  //重新整理 删除了一个&
{  
    int p,q,i;  
    SLNode temp;  
    p=L.sl[0].next;         //p指向第一个记录的当前位置
    for(i=1;i<L.length;i++)  //l.s1[1…i-1]已按关键字有序化
        {  
            while(p<i)  
                p=L.sl[p].next;        //找到第i个记录,并用p指向其在L中当前位置
            q=L.sl[p].next;        //q指向尚未调整的表尾
            if(p!=i)
                {
                    temp=L.sl[p]; L.sl[p]=L.sl[i]; L.sl[i]=temp; L.sl[i].next=p;
                }  //交换记录
            p=q;    //p指向尚未调整的表尾,为找第i+1个记录做准备
        }
}  
// 二分查找函数  
int BinSearch(SLList L,KeyType key[])
{  
    int low,high,mid; low=1;  
    high=L.length;
    while(low<=high)
        {  mid=(low+high)/2;  
        if(strcmp(key,L.sl[mid].keys)==0)
            return mid;  
        else if(strcmp(key,L.sl[mid].keys)<0)
            high=mid-1;
        else  
            low=mid+1;
        }
    return 0;
}
// 顺序查找函数  
void SeqSearch(SLList L,KeyType key[],int i)
{  
    int j,k,m=0;
    printf("*************************************************************\n");
    printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *\n");
    for(j=1;j<=L.length;j++)
        {  
            switch(i)
                {  
                    case 2:k=strcmp(key,L.sl[j].others.start);break;
                    case 3:k=strcmp(key,L.sl[j].others.end);break;
                    case 4:k=strcmp(key,L.sl[j].others.time1);break;
                    case 5:k=strcmp(key,L.sl[j].others.time2);break;
                }  
            if(k==0)
                {
                    m=1;  
                    printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",L.sl[j].keys,L.sl[j].others.start,L.sl[j].others.end,L.sl[j].others.sche,L.sl[j].others.time1,L.sl[j].others.time2,L.sl[j].others.model,L.sl[j].others.price);
                }
        }
    if(m==0)  
        printf("* 无此航班信息,可能是输入错误!*\n");  
        printf("*************************************************************\n");
    }   
// 查询检索菜单控制程序
void searchcon(SLList L)
{  
    KeyType key[keylen];
    int i=1,k;  
    while(i>=1&&i<=5)
        {   
            printf(" ********************\n");
            printf(" * 航班信息查询系统 *\n");
            printf(" ********************\n");
            printf(" *    1.航 班 号    *\n");
            printf(" *    2.起 点 站    *\n");
            printf(" *    3.终 点 站    *\n");
            printf(" *    4.起飞时间    *\n");
            printf(" *    5.到达时间    *\n");
            printf(" *    0.退出系统    *\n");
            printf(" ********************\n");
            printf(" 请选择(0-5): \n");
            scanf("%d",&i);
            switch(i)
                {  
                    case 1:printf("输入要查询的航班号(字母要大写):");
                    scanf("%s",key);
                    k=BinSearch(L,key);  
                    printf("*************************************************************\n");
                    if(k==0)  
                        printf(" 无此航班信息,可能是输入错误!\n");
                    else
                        {
                            printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *\n");
                            printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",L.sl[k].keys,L.sl[k].others.start,L.sl   [k].others.end,L.sl[k].others.sche,L.sl[k].others.time1,L.sl[k].others.time2,L.sl  [k].others.model,L.sl[k].others.price);
                        }  
                    printf("*************************************************************\n");
                    break;  
                    case 2:printf("输入要查询的航班起点站名:");
                    scanf("%s",key);
                    SeqSearch(L,key,i);
                    break;  
                    case 3:printf("输入要查询的航班终点站名:");
                    scanf("%s",key);
                    SeqSearch(L,key,i);
                    break;  
                    case 4:printf("输入要查询的航班起飞时间:");
                    scanf("%s",key);
                    SeqSearch(L,key,i);
                    break;  
                    case 5:printf("输入要查询的航班到达时间:");
                    scanf("%s",key);
                    SeqSearch(L,key,i);
                    break;  
                    case 0:printf("再 见 \n");
                }
        }
}
// 输入航班记录函数  
void InputData(SLList L) //删除了一个&
{  
    int i=++L.length;
    char yn='y';  
    while(yn=='y'||yn=='Y')
        {  
            printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");  
            scanf("%s%s%s%s%s%s%s%d",L.sl[i].keys,L.sl[i].others.start,L.sl[i].others.end,L.sl[i].others.sche,L.sl[i].others.time1,L.sl[i].others.time2,L.sl[i].others.model,&L.sl[i].others.price);
            ++i;
            getchar();  
            RadixSort(L);
            Arrange(L);  
            printf("继续输入吗?y/n:");
            scanf("%c",&yn);  
        }  
    L.length=i-1;
}  
void main()
{  
    // int i,k;     
    SLList L;  
    // KeyType key[keylen];      
    L.keynum=6;   
    L.length=0;   //输入航班记录     
    InputData(L);     //基数排序  
    RadixSort(L);  
    Arrange(L);     
    searchcon(L);     
    return  0;
}
                        
        

搜索更多相关主题的帖子: include 关键字 price start 起点 
2015-12-17 16:24
快速回复:运行出错,求大神帮忙改
数据加载中...
 
   



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

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