資源簡介
1.問題描述
該設計要求對飛機航班信息進行排序和查找。可按航班的航班號、起點站、終點站、起飛時間以及到達時間等信息進行查詢。
2.擴展功能:
①能夠在起點站與終點站相同的航班信息中篩選出票價最低及飛行時間最短的航班,并顯示;
②能夠不斷添加新的航班信息;
③能夠檢驗輸入時間的合法性。
3.任務要求
對于本設計,可采用基數排序法對一組具有結構特點的飛機航班號進行排序,利用二分查找法對排好序的航班記錄按航班號實現快速查找,按其他次關鍵字的查找可采用最簡單的順序查找方法進行,因此他們用得較少。
每個航班記錄包括八項,分別是:航班號、起點站、終點站、班期、起飛時間、到達時間、飛機型號以及票價等,假設航班信息表(8條記錄)
航班號 起點站 終點站 班期 起飛時間 到達時間 機型 票價
CA1544 合肥 北京 1.2.4.5 1055 1240 733 960
MU5341 上海 廣州 每日 1420 1615 M90 1280
CZ3869 重慶 深圳 2.4.6 0855 1035 733 1010
MU3682 桂林 南京 2.3.4.6.7 2050 2215 M90 1380
HU1836 上海 北京 每日 0940 1120 738 1250
CZ3528 成都 廈門 1.3.4.5.7 1510 1650 CRJ 1060
MU4594 昆明 西安 1.3.5.6 1015 1140 328 1160
SC7425 青島 海口 1.3.6 1920 2120 DH4 1630
其中航班號一項的格式為:
K0 K1 K2 K3 K4 K5
C Z 3 8 6 9
其中K0和K1的輸入值是航空公司的別稱,用兩個大寫字母標示,后4位為航班號,這種航班號關鍵字可分成兩段,即字母和數字。其余七項輸入內容因為不涉及本設計的核心,因此除了票價為數值型外,均定義為字符串即可。
代碼片段和文件信息
#include
#include
#include
#include/*getch()不回顯函數的頭文件*/
#define?Max?100
#define?keylen?7
#define?flight_num?10/*航班號數字*/
#define?flight_letter?26/*航班號字母*/
typedef?char?keytype;/*定義一個關鍵字類型*/
typedef?struct?
{
???char?start[6];/*起點站*/
???char?end[6];/*終點站*/
???char?date[15];/*班期*/
???char?stime[5];/*起飛時間*/
???char?atime[5];/*到達時間*/
???char?type[4];/*機型*/
???int??price;/*票價*/
}Flight;/*航班記錄類型*/
typedef?struct
{
???keytype?keys[keylen];/*關鍵字(航班號)*/
???Flight?others;/*其它信息*/
???int?next;
}SLNode;/*靜態鏈表結點類型*/
typedef?struct
{
???SLNode?SL[Max];/*靜態鏈表,SL[0]為頭結點*/
???int?keynum;/*記錄當前關鍵字字符個數*/
???int?length;/*當前表長*/
}SLList;/*靜態鏈表類型*/
typedef?int?array_num[flight_num];/*十進制數字指針數組*/
typedef?int?array_letter[flight_letter];/*26個字母指針數組*/
//函數聲明
SLList?inputdata1(SLList?&L);
SLList?inputdata(SLList?&L);/*輸入函數(數據有序化)*/
void?Menu(SLList?L);/*檢索菜單及控制函數*/
void?distribute_num(SLNode?*SLint?iarray_num?farray_num?e);/*數字字符分配函數(一趟)*/
void?Collect_num(SLNode?*SLint?iarray_num?farray_num?e);/*數字字符收集函數(一趟)*/
void?distribute_letter(SLNode?*SLint?iarray_letter?farray_letter?e);/*字母字符分配函數(一趟)*/
void?Collect_letter(SLNode?*SLint?iarray_letter?farray_letter?e);/*字母字符收集函數(一趟)*/
void?RadixSort(SLList?&L);/*鏈式基數排序函數*/
void?Arrange(SLList?&L);/*按指針鏈重新整理靜態鏈表,便于查找(省時省空間)*/?
int?half_search(SLList?Lkeytype?key[]);/*折半查找(航班號)*/
void?price_search(SLList?Lint?w);/*票價查找*/
void?order_search(SLList?Lkeytype?key[]int?i);/*順序查找*/
void?find_way(SLList?Lchar?sta[]char?end[]);/*票價查找*/
int?main()
{
???SLList?L;
???L.keynum=6;/*航班號當前個數*/
???L.length=0;/*航班信息當前個數(初始化)*/
???inputdata(L);/*數據輸入并有序化*/
???Menu(L);/*檢索菜單及輸出*/
???return?0;
}
void?distribute_num(SLNode?*SLint?iarray_num?farray_num?e)/*數字字符分配函數(一趟)*/
{
???int?jp;
???for(j=0;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;/*f[j]為0*/
??????else
??????SL[e[j]].next=p;
??????e[j]=p;/*將p指向的結點插入到第j個子表中*/
???}
}
void?Collect_num(SLNode?*SLint?iarray_num?farray_num?e)/*數字字符收集函數(一趟)*/
{
???int?jt;
???for(j=0;f[j];j++)/*找第一個非空子表*/
???SL[0].next=f[j];/*指向第一個非空子表的一個結點*/
???t=e[j];
???while(j ???{
??????for(j=j+1;j ??????if(f[j])
??{
?????????SL[t].next=f[j];
?????????t=e[j];?/*連接兩個非空子表*/
??}
???}
???SL[t].next=0;/*t指向最后一個非空子表的最后一個結點*/
}
void?distribute_letter(SLNode?*SLint?iarray_letter?farray_letter?e)/*字母字符分配函數(一趟)*/
{
???int?jp;
???for(j=0;j ???{
??????f[j]=e[j]=0;
???}
???for(p=SL[0].next;p;p=SL[p].next)
???{
??????j=SL[p].keys[i]%65;/*A-Z的ASCII碼值為65-90*/
??????if(!f[j])
??????f[j]=p;
??????else
??????SL[e[j]].next=p;
??????e[j]=p;
???}
}
void?Collect_letter(SLNode?*SLint?iarray_letter?farray_letter?e)/*字母字符收集函數(一趟)*/
{
???int?jt;
???f
- 上一篇:矩陣相乘的c語言代碼
- 下一篇:C++學校人員信息管理系統課程設計.doc
評論
共有 條評論