雜湊演算法 C語言實現(採用鍊錶)

2021-08-12 00:06:06 字數 1982 閱讀 7802

7-16 航空公司vip客戶查詢(25 分)

不少航空公司都會提供優惠的會員服務,當某顧客飛行里程累積達到一定數量後,可以使用里程積分直接兌換獎勵機票或獎勵公升艙等服務。現給定某航空公司全體會員的飛行記錄,要求實現根據身份證號碼快速查詢會員里程積分的功能。

輸入首先給出兩個正整數n(

≤10​

5​​)和

k(≤5

00)。其中

k是最低里程,即為照顧乘坐短程航班的會員,航空公司還會將航程低於

k公里的航班也按

k公里累積。隨後

n行,每行給出一條飛行記錄。飛行記錄的輸入格式為:18位身份證號碼(空格)飛行里程。其中身份證號碼由17位數字加最後一位校驗碼組成,校驗碼的取值範圍為0~9和x共11個符號;飛行里程單位為公里,是(0, 15 000]區間內的整數。然後給出乙個正整數m(

≤10​

5​​),隨後給出

m行查詢人的身份證號碼。

對每個查詢人,給出其當前的里程累積值。如果該人不是會員,則輸出no info。每個查詢結果佔一行。

4 500

330106199010080419 499

110108198403100012 15000

120104195510156021 800

330106199010080419 1

4120104195510156021

110108198403100012

330106199010080419

33010619901008041x

800

15000

1000

no info

大體思路:
建立乙個不佔多少記憶體但是又很巨量的指標陣列
然後採用 身份證號處理 第6,10,14,16,17,18位 轉換為雜湊位址
然後將每個身份證號插入雜湊鍊錶(指標陣列)
**如下:
#include #include #include #include #define max 200000

typedef struct node * hash;/** 雜湊鍊錶中的小單元**/

struct node;

int deal(char *arr) /**處理身份證號**/

int nextprime(int n)  /**需要乙個(大於總數n的又是最小的)素數 為了是以此大小建立雜湊鍊錶後 鍊錶不一定塞滿但是查詢的效率會提高不少**/

return p;

}hash insert(hash h,int x,char *s) /** 雜湊鍊錶的插入 **/

else p=p->next; /** 下乙個小單元 如果最後沒有了 會是null 迴圈會結束**/

}/**然後我i們知道 指標為空,或者此指標指的小鍊錶中沒有此身份證號**/

p= (hash)malloc(sizeof(struct node)); /**那就建立乙個**/

strcpy(p->arr,s); 

p->fen=x;

p->next=h; /**鍊錶的頭節點插入的寫法,在此處比較方便**/

return p;  /**返回新建的節點(此節點的next已經指向了原h所指的東西)給h 畢竟 給拿走了,得把自己和拿走的一起交回去了**/

}void display(hash h,char *s) /**輸入鍊錶的符合條件的身份證號**/

h=h->next;

}printf("no info\n");

}int main()

int x,idex;     /**然後剩下的就沒啥難度了**/

char arr[20];

while(n--)

int m;

scanf("%d\n",&m);

while(m--)

return 0;

}

雜湊表 C語言實現

這裡不講高深理論,只說直觀感受。雜湊表的目的就是為了根據資料的部分內容 關鍵字 直接計算出存放完整資料的記憶體位址。void list find by key list,key return p 為了解決根據關鍵字快速找到元素的存放位址,雜湊表應運而生。它通過某種演算法 雜湊函式 直接根據關鍵字計算...

c語言實現雜湊表

雜湊表大家都在資料結構中學習過,應該是查詢最快的一種資料結構了,最好的情況下可以達到線性的時間複雜度。鍵key的狀態碼如果為 vt undefined 的話那麼就是這個槽位沒有被占用或者已經被刪除了 值value的狀態碼有vt true和vt false兩種,只要這個槽位已經被占用過了,那麼valu...

演算法總結 鍊錶 c語言實現

1.單鏈表的建立 頭插 尾插 2.迴圈鍊錶 include include typedef struct node g main 找到第乙個鍊錶的最後乙個節點 q head link while q link null q link head1 link 讓最後乙個節點的link指向head1的下乙...