問題及**:
設計並實現乙個航班資訊查詢和檢索系統。要求:對飛機航班資訊進行排序和查詢,可按照航班號、起點站、到達站、起飛時間和到達時間等資訊進行查詢。航班資訊表的樣式如下:
航班號起點站
終點站 班期
起飛時間
到達時間 機型
票價ca1544 合肥
北京1.2.4.5
10:55
12:40
733960
mu5341 上海
廣州 每日
14:20
16:15
m901280
cz3869 重慶
深圳2.4.6
08:55
10:35
7331010
其中航班號一項的格式為:前兩個大寫字母表示航空公司的名稱,後
4位為航班編號,例如:
ca1544,ca
表示航空公司的名稱,
1544
為航班編號。
/*
**檔名稱:flight.cpp
*檔案標識:無
*內容摘要:該**用於獲取滿足字尾要求的第乙個檔案
*其他說明:無
*當前版本:v1.0
*作 者:單昕昕
*完成日期:2023年6月22日
**修改記錄:
*修改日期:無。
*版本號:
*修改人:單昕昕
*修改內容:
*/#include #include #include #include //操作檔案必寫
#include using namespace std;
const int maxn=10000;
const int p=23;
const string nullkey="nullkey";//定義空關鍵字值
const string delkey="delkey";//定義被刪關鍵字值
string x[maxn];//輸入時的航班號
int hashlen=0;//雜湊表長度
ifstream infile("read.txt",ios::in);
typedef struct
info;//說明資訊型別
typedef struct
hash;//雜湊表型別
hash ha[maxn];//定義乙個雜湊表
int work();//功能選擇表單
int getnum(string k);//取出航班號中的數值部分
int search(string key);//在雜湊表中查詢航班號
int delete(string str);//刪除指定的航班資訊
void insert1(string key);//自動插入航班資訊
void insert2(string key);//手動插入航班資訊
void create1();//檔案自動讀取
void create2();//鍵盤手動輸入
void number(string key);//查詢航班號
void departure(string key);//查詢起點站
void terminal(string key);//查詢到達站
void start(string key);//查詢起飛時間
void arrival(string key);//查詢到達時間
void fileoutput(int adr);//航班資訊存入檔案
void output(int adr);//航班資訊在螢幕上顯示
void input(int adr);//手動輸入航班資訊
/**函式名稱:work
*功能描述:航班資訊查詢和檢索系統的選擇功能選單
*輸入引數:無
*輸出引數:無
*返回值:無
*其他說明:無
*/int work()
case 4://④起點站
case 5://⑤到達站
case 6://⑥起飛時間
case 7://⑦到達時間
case 8://⑧退出系統
else//發生衝突時採用線性探查法解決衝突
ha[adr].number=key;
ha[adr].cnt=i;
infile>>ha[adr].data.departure>>ha[adr].data.terminal>>ha[adr].data.schedule;
infile>>ha[adr].data.start>>ha[adr].data.arrival>>ha[adr].data.type>>ha[adr].data.price;
}++hashlen;//雜湊表的元素個數加一}/*
*函式名稱:insert2
*功能描述:在雜湊表中由檔案手動插入航班資訊
*輸入引數:key-航班號
*輸出引數:hashlen-雜湊表元素個數,ha[adr].number-關鍵字,ha[adr].cnt-探查次數
*返回值:無
*其他說明:無
*/void insert2(string key)
else
ha[adr].number=key;
ha[adr].cnt=i;
input(adr);//手動輸入剩下資訊
}++hashlen;}/*
*函式名稱:create1
*功能描述:在雜湊表中自動插入航班關鍵字資訊
*輸入引數:key-航班號
*輸出引數:ha[adr].number-關鍵字全部初始化為nullkey,ha[adr].cnt-探查次數全部初始化為0
*返回值:無
*其他說明:無
*/void create1()
infile.close();//讀入完畢一定要關閉檔案}/*
*函式名稱:create2
*功能描述:在雜湊表中手動插入航班關鍵字資訊
*輸入引數:key-航班號
*輸出引數:ha[adr].number-關鍵字全部初始化為nullkey,ha[adr].cnt-探查次數全部初始化為0
*返回值:無
*其他說明:無
*/void create2()}/*
*函式名稱:number
*功能描述:在雜湊表中查詢航班號
*輸入引數:key-航班號
*輸出引數:ha[adr].number-航班號,ha[adr].data.departure-起點站,ha[adr].data.terminal-到達站,ha[adr].data.schedule-班期,
ha[adr].data.start-起飛時間,ha[adr].data.arrival-到達時間,ha[adr].data.type-機型,ha[adr].data.price-票價
*返回值:無
*其他說明:無
*/void number(string key)
if(ha[adr].number==key&&ha[adr].number!=delkey)
else
cout>ha[adr].data.terminal>>ha[adr].data.schedule;
cin>>ha[adr].data.start>>ha[adr].data.arrival>>ha[adr].data.type>>ha[adr].data.price;
}int main()
執行結果:
**設計簡述:
(詳見**注釋)
根據航班號使用雜湊表儲存,關鍵字是被轉成數值的航班號;
航班號使用線性探查法解決衝突;其他查詢使用順序查詢。
資料結構中的「查詢」(檢索)
內查詢和外查詢 都在記憶體中查詢即內查詢,外查詢還涉及外存,比如硬碟等。分類包括 1 線性表的查詢 又分順序查詢 二分查詢和分塊查詢。1 二分查詢又叫折半查詢 2 分塊查詢 線性表分成塊,每塊內部不要求有序,但塊塊之間應有序 2 樹表查詢 1 二叉排序樹 2 平衡的二叉排序樹 3 b樹 前面方法都只...
資料結構 排序和查詢
氣泡排序 void bubblesort elemtype r,int n,int comp num,int move num if flag 0 break 快速排序 void quicksort elemtype r,int left,int right,int comp num,int mov...
資料結構之排序和查詢
快速排序是一種不穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。以乙個陣列作為示例...