国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

2.問題描述

1、設(shè)每個(gè)記錄有下列數(shù)據(jù)項(xiàng):電話號碼、用戶名、地址;

2、從鍵盤輸入各記錄,分別以電話號碼和用戶名為關(guān)鍵字建立哈希表;

3、查找并顯示給定電話號碼的記錄;

4、查找并顯示給定用戶名的記錄。

5、在哈希函數(shù)確定的前提下,使用各種不同類型處理沖突的方法(開放定址法、 ?拉鏈法),討論平均查找長度的變化。

3.需求分析

3.1 數(shù)據(jù)需求

????電話號碼查詢系統(tǒng)需要存儲的數(shù)據(jù)項(xiàng)有電話號碼、用戶名、地址三個(gè)字段。

3.2 基本功能需求

1.需要使用兩個(gè)解決沖突的方式來進(jìn)行hash存儲

2.分別使用姓名和電話號兩個(gè)屬性進(jìn)行hash存儲。

3.可以插入新的用戶記錄,包括電話號碼、用戶名、地址三個(gè)字段。

4.可以查詢用戶記錄: 可以通過電話號碼或姓名來查詢用戶記錄。

5.開放定址法: 使用數(shù)組存儲數(shù)據(jù),當(dāng)發(fā)生沖突時(shí),通過查找下一個(gè)空閑單元來解決沖突。

6.鏈地址法: 使用鏈表存儲數(shù)據(jù),當(dāng)發(fā)生沖突時(shí),將新數(shù)據(jù)插入鏈表中,通過鏈表來解決沖突。

3.3 非功能性需求

用戶界面需求:簡潔、易用、易懂、友好的用戶界面。

硬件要求:裝有Visual?Studio 2019的計(jì)算機(jī)。

可靠性需求:保證用戶在正常使用本系統(tǒng)時(shí),用戶的操作或誤操作不會(huì)產(chǎn)生數(shù)據(jù)的丟失。

4.概要設(shè)計(jì)

4.1 數(shù)據(jù)結(jié)構(gòu)

  • 開放定址法: 使用 HashNode 類型的數(shù)組來存儲數(shù)據(jù),每個(gè)元素包含一個(gè)Record_1類型的data字段和一個(gè)int類型的is_empty字段。

  • 鏈地址法: 使用結(jié)構(gòu)體Record_2存儲數(shù)據(jù),每個(gè)結(jié)構(gòu)體包含電話號碼、用戶名、地址三個(gè)字段和一個(gè)指向下一個(gè)結(jié)構(gòu)體的指針next。

4.2 系統(tǒng)包含的函數(shù)

  1. hash_func_1: 使用簡單的哈希函數(shù)計(jì)算給定字符串的哈希值
  2. search_by_phone_1: 通過電話號碼在哈希表中搜索記錄,并打印該記錄的姓名和地址
  3. search_by_name_1: 通過姓名在哈希表中搜索記錄,并打印該記錄的電話號碼和地址
  4. insert_data_by_phone_1: 在哈希表中插入一條新記錄,根據(jù)電話號碼計(jì)算哈希值
  5. print_avg_lengths_phone_1: 打印哈希表中每個(gè)桶的平均長度,根據(jù)電話號碼計(jì)算哈希值
  6. print_avg_lengths_name_1: 打印哈希表中每個(gè)桶的平均長度,根據(jù)姓名計(jì)算哈希值
  7. insert_data_by_name_1: 在哈希表中插入一條新記錄,根據(jù)姓名計(jì)算哈希值
  8. init_hash_table_2: 初始化哈希表,將所有元素的next指針設(shè)為NULL
  9. hash_by_phone_2: 計(jì)算電話號碼的哈希值
  10. hash_by_name_2: 計(jì)算姓名的哈希值
  11. display_record_2: 打印一條記錄的電話號碼,姓名和地址
  12. insert_by_phone_2: 插入一條新記錄,根據(jù)電話號碼計(jì)算哈希值
  13. insert_by_name_2: 插入一條新記錄,根據(jù)姓名計(jì)算哈希值
  14. search_by_phone_2: 通過電話號碼在哈希表中搜索記錄,并打印該記錄的電話號碼,姓名和地址
  15. search_by_name_2: 通過姓名在哈希表中搜索記錄,并打印該記錄的電話號碼,姓名和地址
  16. print_avg_lengths_by_name_2: 打印哈希表中每個(gè)桶的平均長度,根據(jù)姓名計(jì)算哈希值
  17. print_avg_lengths_by_phone_2: 打印哈希表中每個(gè)桶的平均長度,根據(jù)電話號碼計(jì)算哈希值
  18. main2(): 主函數(shù),用于測試哈希表2
  19. main1(): 主函數(shù),用于測試哈希表1

4.3 函數(shù)間的關(guān)系

  1. hash_func_1, hash_by_phone_2, hash_by_name_2 這三個(gè)函數(shù)都是用于計(jì)算哈希值的,hash_func_1是用來計(jì)算第一個(gè)哈希表中哈希值的,hash_by_phone_2和hash_by_name_2是用來計(jì)算第二個(gè)哈希表中哈希值的。
  2. insert_by_phone_2和insert_by_name_2這兩個(gè)函數(shù)是用來在第二個(gè)哈希表中插入記錄的,它們使用了hash_by_phone_2和hash_by_name_2函數(shù)來計(jì)算哈希值
  3. search_by_phone_1,search_by_name_1,search_by_phone_2,?search_by_name_2這四個(gè)函數(shù)都是用來在哈希表中搜索記錄的,它們分別對應(yīng)第一個(gè)哈希表和第二個(gè)哈希表中搜索電話號碼和姓名。
  4. display_record_2函數(shù)是用來打印第二個(gè)哈希表中搜索到的記錄的電話號碼,姓名和地址。
  5. init_hash_table_2函數(shù)是用來初始化第二個(gè)哈希表的,它會(huì)將所有的鏈表指針都設(shè)置為NULL。
  6. main2()和main1()是程序的主入口,它們分別調(diào)用了第一個(gè)哈希表和第二個(gè)哈希表的插入,查詢和顯示函數(shù)來測試哈希表的功能。

4.4 系統(tǒng)功能模塊圖

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)

5.詳細(xì)設(shè)計(jì)

5.1 結(jié)構(gòu)體的詳細(xì)定義

typedef struct {
? ? char phone[20];//電話號碼
? ? char name[20];//姓名
? ? char address[100];//地址
} Record_1;

typedef struct {//結(jié)構(gòu)體定義
? ? Record_1 data;
? ? int is_empty;
} HashNode;

struct Record_2 {
? ? char phone[20];
? ? char name[20];
? ? char address[100];
? ? struct Record_2* next;
}

5.2 系統(tǒng)函數(shù)詳細(xì)介紹

  1. hash_func_1: 使用簡單的哈希函數(shù)計(jì)算給定字符串的哈希值
  2. search_by_phone_1: 通過電話號碼在哈希表中搜索記錄,并打印該記錄的姓名和地址
  3. search_by_name_1: 通過姓名在哈希表中搜索記錄,并打印該記錄的電話號碼和地址
  4. insert_data_by_phone_1: 在哈希表中插入一條新記錄,根據(jù)電話號碼計(jì)算哈希值
  5. print_avg_lengths_phone_1: 打印哈希表中每個(gè)桶的平均長度,根據(jù)電話號碼計(jì)算哈希值
  6. print_avg_lengths_name_1: 打印哈希表中每個(gè)桶的平均長度,根據(jù)姓名計(jì)算哈希值
  7. insert_data_by_name_1: 在哈希表中插入一條新記錄,根據(jù)姓名計(jì)算哈希值
  8. init_hash_table_2: 初始化哈希表,將所有元素的next指針設(shè)為NULL
  9. hash_by_phone_2: 計(jì)算電話號碼的哈希值
  10. hash_by_name_2: 計(jì)算姓名的哈希值
  11. display_record_2: 打印一條記錄的電話號碼,姓名和地址
  12. insert_by_phone_2: 插入一條新記錄,根據(jù)電話號碼計(jì)算哈希值
  13. insert_by_name_2: 插入一條新記錄,根據(jù)姓名計(jì)算哈希值
  14. search_by_phone_2: 通過電話號碼在哈希表中搜索記錄,并打印該記錄的電話號碼,姓名和地址
  15. search_by_name_2: 通過姓名在哈希表中搜索記錄,并打印該記錄的電話號碼,姓名和地址
  16. print_avg_lengths_by_name_2: 打印哈希表中每個(gè)桶的平均長度,根據(jù)姓名計(jì)算哈希值
  17. print_avg_lengths_by_phone_2: 打印哈希表中每個(gè)桶的平均長度,根據(jù)電話號碼計(jì)算哈希值
  18. main2(): 主函數(shù),用于測試哈希表2
  19. main1(): 主函數(shù),用于測試哈希表1

5.3 系統(tǒng)功能模塊介紹

本系統(tǒng)包括兩個(gè)模塊:

一個(gè)是線性探測模塊(如圖5-3-1),一個(gè)是拉鏈法模塊(如圖5-3-2)。

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)

?圖5-3-1線性探測法模塊流程圖

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)

?

圖5-3-2 拉鏈法模塊流程圖

5.4?各相關(guān)數(shù)據(jù)結(jié)構(gòu)、算法間的對比

  1. search_by_phone_1: 根據(jù)電話號碼在第一個(gè)哈希表中查找記錄。首先使用hash_func_1函數(shù)計(jì)算電話號碼的哈希值,然后在哈希表中循環(huán)查找,直到找到對應(yīng)的記錄或者遍歷完整個(gè)哈希表。如果找到,則輸出記錄的姓名和地址,如果沒有找到,則輸出沒有找到該人員信息。
  2. search_by_name_1: 根據(jù)姓名在第一個(gè)哈希表中查找記錄。首先使用hash_func_1函數(shù)計(jì)算姓名的哈希值,然后在哈希表中循環(huán)查找,直到找到對應(yīng)的記錄或者遍歷完整個(gè)哈希表。如果找到,則輸出記錄的電話號碼和地址,如果沒有找到,則輸出沒有找到該人員信息。
  3. insert_data_by_phone_1: 根據(jù)電話號碼在第一個(gè)哈希表中插入記錄。首先使用hash_func_1函數(shù)計(jì)算電話號碼的哈希值,然后在哈希表中循環(huán)查找空閑位置插入記錄。如果遍歷了整個(gè)哈希表都沒有空閑位置,則輸出錯(cuò)誤信息。
  4. insert_data_by_name_1: 根據(jù)姓名在第一個(gè)哈希表中插入記錄。首先使用hash_func_1函數(shù)計(jì)算姓名的哈希值,然后在哈希表中循環(huán)查找空閑位置插入記錄。如果遍歷了整個(gè)哈希表都沒有空閑位置,則輸出錯(cuò)誤信息。
  5. print_avg_lengths_phone_1:計(jì)算第一個(gè)哈希表中電話號碼的平均查找長度。這個(gè)函數(shù)會(huì)遍歷整個(gè)哈希表,查找每個(gè)記錄對應(yīng)的電話號碼的查找長度,然后計(jì)算總長度的平均值。
  6. print_avg_lengths_name_1: 與print_avg_lengths_phone_1類似,計(jì)算第一個(gè)哈希表中姓名的平均查找長度。
  7. insert_by_phone_2: 根據(jù)電話號碼在第二個(gè)哈希表中插入記錄。首先hash_by_phone_2函數(shù)計(jì)算電話號碼的哈希值,然后在對應(yīng)的哈希值位置插入新節(jié)點(diǎn)。
  8. search_by_phone_2根據(jù)電話號碼在第二個(gè)哈希表中查找記錄:首先使用hash_by_phone_2函數(shù)計(jì)算電話號碼的哈希值。根據(jù)哈希值找到相應(yīng)的鏈表在鏈表中遍歷每一個(gè)節(jié)點(diǎn),如果找到匹配的電話號碼輸出信息,否則輸出沒有找到。
  9. insert_by_name_2: 根據(jù)姓名在第二個(gè)哈希表中插入記錄。首先hash_by_name_2函數(shù)計(jì)算姓名的哈希值,然后在對應(yīng)的哈希值位置插入新節(jié)點(diǎn)。
  10. search_by_name_2根據(jù)姓名在第二個(gè)哈希表中查找記錄:首先使用hash_by_name_2函數(shù)計(jì)算姓名的哈希值。根據(jù)哈希值找到相應(yīng)的鏈表在鏈表中遍歷每一個(gè)節(jié)點(diǎn),如果找到匹配的姓名輸出信息,否則輸出沒有找到。

數(shù)據(jù)結(jié)構(gòu)對比:

  1. 線性探測法(Open Addressing):當(dāng)發(fā)生沖突時(shí),在哈希表中往后探測一個(gè)單位(如+1或+2),直到找到一個(gè)空位置。優(yōu)點(diǎn)是在哈希表中使用空間更緊湊,缺點(diǎn)是當(dāng)哈希表較滿時(shí),查詢性能會(huì)受到影響。

  2. 拉鏈法(Chaining):當(dāng)發(fā)生沖突時(shí),將哈希值相同的記錄放入一個(gè)鏈表中。優(yōu)點(diǎn)是當(dāng)哈希表較滿時(shí),查詢性能依然較好,缺點(diǎn)是需要額外的空間來存儲

改進(jìn)思路:開放定址法中可以使用雙重散列函數(shù),以減少?zèng)_突的可能。界面應(yīng)該設(shè)計(jì)更加人性化,方便非專業(yè)人員使用,以及提高代碼的健壯性,對程序進(jìn)行不斷的測試,測試出程序中,不嚴(yán)謹(jǐn)問題。

6.調(diào)試分析

本軟件是基于Windows的編程開發(fā),所以,軟件調(diào)試必須在Windows環(huán)境下進(jìn)行。調(diào)試前須做好準(zhǔn)備工作:

1.需要安裝Visual?Studio 2019的計(jì)算機(jī)一臺;

配置好之后,在Visual?Studio 2019環(huán)境下進(jìn)行軟件的調(diào)試。

2.測試數(shù)據(jù):

沖突選擇輸入:

main”模塊,根據(jù)控制臺主界面提示,選擇解決沖突的方式,鍵入數(shù)字1,會(huì)選擇線性探測法(開放定址法),鍵入2會(huì)選擇拉鏈法。?

在“查詢數(shù)據(jù)”模塊中,根據(jù)主界面提示,鍵入數(shù)字2,確定,再按提示進(jìn)行操作測試,鍵入姓名如小黑,確定,程序顯示該姓名相關(guān)記錄的所有信息,如果沒有找到該姓名的記錄,程序提示“該人員沒有找到”。

3.算法改進(jìn)設(shè)想:

開放定址法中可以使用雙重散列函數(shù),以減少?zèng)_突的可能。界面應(yīng)該設(shè)計(jì)更加人性化,方便非專業(yè)人員使用,以及提高代碼的健壯性,對程序進(jìn)行不斷的測試,測試出程序中,不嚴(yán)謹(jǐn)問題。

4.使用說明

1.電話號碼為關(guān)鍵字建立的哈希表,按電話號碼查詢,線性探測法解決沖突,成功找到該人員并打印該人員信息和平均查找成功和失敗長度。(如圖7-1)

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)

?圖7-1

2.電話號碼為關(guān)鍵字建立的哈希表,按電話號碼查詢,拉鏈法解決沖突,成功找到該人員并打印該人員信息和平均查找成功和失敗長度。(如圖7-2)

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)?如圖7-2

3.姓名為關(guān)鍵字建立的哈希表,按姓名查詢,線性探測法解決沖突,成功找到該人員并打印該人員信息和平均查找成功和失敗長度。(如圖7-3)

如圖7-3

4.姓名為關(guān)鍵字建立的哈希表,按姓名查詢,拉鏈法解決沖突,成功找到該人員并打印該人員信息和平均查找成功和失敗長度。(如圖7-4)

?如圖7-4

5.電話號碼為關(guān)鍵字建立的哈希表,按電話號碼查詢,線性探測法解決沖突,沒有找到該人員,打印平均查找成功和失敗長度。(如圖7-5)

(如圖7-5)

6.電話號碼為關(guān)鍵字建立的哈希表,按電話號碼查詢,拉鏈法解決沖突,沒有找到該人員,打印平均查找成功和失敗長度(如圖7-6)

《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)

?

(如圖7-6)

7.源代碼(首尾一小部分,中間部分略)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE ?7

typedef struct {
? ? char phone[20];//電話號碼
? ? char name[20];//姓名
? ? char address[100];//地址
} Record_1;

typedef struct {//結(jié)構(gòu)體定義
? ? Record_1 data;
? ? int is_empty;
} HashNode;

struct Record_2 {
? ? char phone[20];
? ? char name[20];
? ? char address[100];
? ? struct Record_2* next;
};

unsigned int hash_func_1(const char* str) {//使用簡單的哈希函數(shù)計(jì)算給定字符串的哈希值

????unsigned int hash = 0;

????while (*str) {

????????hash = hash * 31 + *str++;

????}

????return hash % SIZE;

}

void insert_data_by_phone_1(HashNode table[], Record_1 record_1) {//在哈希表中插入一條新記錄,根據(jù)電話號碼計(jì)算哈希值(第一個(gè)哈希表)

????unsigned int index = hash_func_1(record_1.phone);

????int cnt = 1;

????while (1) {

????????if (table[index].is_empty == 0) {

????????????table[index].data = record_1;

????????????table[index].is_empty = 1;

????????????return;

????????}

????????if (strcmp(table[index].data.phone, record_1.phone) == 0) {

????????????printf("該電話 %s 已經(jīng)存在\n", record_1.phone);

????????????return;

????????}

????????index = (index + 1) % SIZE;

????????cnt++;

????????if (cnt == SIZE) {

????????????printf("hash表已滿!\n");

????????????return;

????????}

????}

}

int search_by_phone_1(HashNode table[], const char* phone) {//通過電話號碼在哈希表中搜索記錄,并打印該記錄的姓名和地址(第一個(gè)哈希表)

????unsigned int index = hash_func_1(phone);

????int cnt = 0;

????while (1) {

????????if (table[index].is_empty == 0) {

????????????printf("沒有找到該人員信息!\n");

????????????return cnt;

????????}

????????if (strcmp(table[index].data.phone, phone) == 0) {

????????????printf("姓名: %s, 地址: %s\n", table[index].data.name, table[index].data.address);

????????????return cnt;

????????}

????????index = (index + 1) % SIZE;

????????cnt++;

????????if (cnt == SIZE) {

????????????printf("沒有找到該人員信息!\n");

????????????return cnt;

????????}

????}

}

int search_by_phone_11(HashNode table[], const char* phone) {
? ? unsigned int index = hash_func_1(phone);
? ? int cnt = 0;
? ? while (1) {
? ? ? ? if (table[index].is_empty == 0) {
? ? ? ? ? ? //printf("沒有找到該人員信息!\n");
? ? ? ? ? ? return cnt;
? ? ? ? }
? ? ? ? if (strcmp(table[index].data.phone, phone) == 0) {
? ? ? ? ? ? //printf("姓名: %s, 地址: %s\n", table[index].data.name, table[index].data.address);
? ? ? ? ? ? return cnt;
? ? ? ? }
? ? ? ? index = (index + 1) % SIZE;
? ? ? ? cnt++;
? ? ? ? if (cnt == SIZE) {
? ? ? ? ? ? //printf("沒有找到該人員信息!\n");
? ? ? ? ? ? return cnt;
? ? ? ? }
? ? }
}


void print_avg_lengths_phone_1(HashNode table[]) {//打印哈希表中每個(gè)桶的平均長度,根據(jù)電話號碼計(jì)算哈希值(第一個(gè)哈希表)
? ? char phone[20] = "qwer";
? ? int total_count = 0;
? ? int total_length = 0;
? ? int fail_count = 0;
? ? int fail_length = 0;
? ? for (int i = 0; i < SIZE; i++) {
? ? ? ? if (table[i].is_empty == 1) {
? ? ? ? ? ? total_count++;
? ? ? ? ? ? total_length += search_by_phone_11(table, table[i].data.phone);
? ? ? ? ? ? fail_length += search_by_phone_11(table, phone);
? ? ? ? }

? ? }

? ? printf("平均查找成功長度: %f\n", (float)total_length / total_count);//計(jì)算第一個(gè)哈希表中電話號碼的平均查找長度(第一個(gè)哈希表)
? ? printf("平均查找失敗長度: %f\n", (float)fail_length / SIZE);
}

(中間部分略)。。。。。。

int main() {

????int choice;

????while (1) {

????????printf("\n-------------------------------------------------------------\n");

????????printf("*****************歡迎使用電話號碼查詢系統(tǒng)********************\n");

????????printf("-------------------------------------------------------------\n");

????????printf("請選擇解決沖突的方法:\n");

????????printf("\t\t\t\t\t\t1.開放定址法\n");

????????printf("\t\t\t\t\t\t2.拉鏈法\n");

????????printf("\t\t\t\t\t\t請選擇!\n");

????????printf("請輸入:");

????????scanf("%d", &choice);

????????if (choice == 1) {

????????????main1();

????????}

????????else if (choice = 2) {

????????????main2();

????????}

????????else {

????????????printf("輸入錯(cuò)誤!");

????????}

????}

}

8.設(shè)計(jì)總結(jié)

在進(jìn)行本次實(shí)驗(yàn)時(shí),我學(xué)會(huì)了使用哈希表的相關(guān)算法,包括線性探測法和拉鏈法,并對比了這兩種算法在實(shí)現(xiàn)上的不同。我還學(xué)會(huì)了在 C 語言中使用結(jié)構(gòu)體來存儲數(shù)據(jù),以及如何使用鏈表來實(shí)現(xiàn)拉鏈法。

在實(shí)驗(yàn)過程中,我首先使用了線性探測法實(shí)現(xiàn)哈希表,并在該算法的基礎(chǔ)上改進(jìn)了拉鏈法的實(shí)現(xiàn)。通過對比兩種算法的實(shí)現(xiàn),我發(fā)現(xiàn)拉鏈法更加靈活,能夠解決線性探測法中的沖突問題。

在實(shí)驗(yàn)中我還學(xué)會(huì)了如何對哈希表中的數(shù)據(jù)進(jìn)行插入、查找等操作。通過實(shí)驗(yàn),我們深刻地理解了哈希表在實(shí)際應(yīng)用中的重要性,并增強(qiáng)了對算法實(shí)現(xiàn)的理解。

在實(shí)驗(yàn)過程中遇到了許多問題,包括:

  1. 計(jì)算姓名和電話號碼的哈希值:使用hash_by_phone_2函數(shù)計(jì)算電話號碼的哈希值,使用hash_by_name_2函數(shù)計(jì)算姓名的哈希值。

int hash_by_phone_2(char* phone) {//計(jì)算電話號碼的哈希值

????int hash = 0;

????for (int i = 0; i < strlen(phone); i++) {

????????hash = (hash * 10 + phone[i] - '0') % SIZE;

????}

????return hash;

}

int hash_by_name_2(char* name) {//計(jì)算姓名的哈希值

????int hash = 0;

????for (int i = 0; i < strlen(name); i++) {

????????hash = (hash * 26 + name[i] - 'A') % SIZE;

????}

????return hash;

}

  1. 平均查找成功和失敗長度的計(jì)算:如用print_avg_lengths_phone_1函數(shù)計(jì)算第一個(gè)哈希表中電話號碼的平均查找長度。這個(gè)函數(shù)會(huì)遍歷整個(gè)哈希表,查找每個(gè)記錄對應(yīng)的電話號碼的查找長度,然后計(jì)算總長度的平均值,其中平均查找成功長度=對應(yīng)的電話號碼的查找成功總長度/哈希表元素個(gè)數(shù);平均查找失敗長度=對應(yīng)的電話號碼的查找失敗總長度/哈希表表長。
  2. 調(diào)試過程中,出現(xiàn)返回值scanf被忽略,取消NULL指針對new_node的引用等警告,通過關(guān)閉配置屬性里的SDL檢查解決等等。
  3. 不足之處:沒有實(shí)現(xiàn)用txt文件來讀出與寫入,保存學(xué)生信息,還有不熟練怎么向他人講述清楚自己的代碼等等,這些還需要自己下去更多的查閱資料和練習(xí)。
  4. 比較好的部分是,實(shí)現(xiàn)了不同沖突解決辦法的平均長度比較。

總之,本次實(shí)驗(yàn)讓我深入理解了哈希表的算法原理,并且提高了我的編程能力,為以后的算法學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。

9.參考文獻(xiàn)

[1]Robert L. Kruse,Data Structures And Program Design in C++,高等教育出版社,2001.5.

[2]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)(C 語言版),清華大學(xué)出版社,1997.4;

[3]趙文靜等編著,數(shù)據(jù)結(jié)構(gòu)與算法,科學(xué)出版社,2005.08;

[4]Clifford,A.Shaffer編著,數(shù)決結(jié)構(gòu)與算法分析(C++版),電子工業(yè)出版社,2005.7

[5] 趙文靜編著,數(shù)據(jù)結(jié)構(gòu)-C++語言描述,西安交通大學(xué)出版社,1999.01

[6] 孫鑫,于安萍編著,VC++深入詳解,電子工業(yè)出版社,2007.7

[7] COHOON & DAVIDSON編著,C++程序設(shè)計(jì),清華大學(xué)出版社,2005.8文章來源地址http://www.zghlxwxcb.cn/news/detail-493088.html

到了這里,關(guān)于《程序設(shè)計(jì)綜合設(shè)計(jì)》課程設(shè)計(jì)--電話號碼查詢系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 17. 電話號碼的字母組合

    17. 電話號碼的字母組合

    給定一個(gè)僅包含數(shù)字 2-9 的字符串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。 給出數(shù)字到字母的映射如下(與電話按鍵相同)。注意 1 不對應(yīng)任何字母。 示例 1: 示例 2: 示例 3: 提示: 0 = digits.length = 4 digits[i] 是范圍 [\\\'2\\\', \\\'9\\\'] 的一個(gè)數(shù)字。 解答

    2024年02月15日
    瀏覽(27)
  • 正則表達(dá)式 - 電話號碼

    正則表達(dá)式 - 電話號碼

    ? ? ? ? 正則表達(dá)式是描述一組字符串特征的模式,用來匹配特定的字符串。 ? ? ? ? 寫一個(gè)正則表達(dá)式匹配電話號碼,并且括號、連字符或點(diǎn)號都是可選的。假定合規(guī)數(shù)據(jù)只包含以下15種匹配模式之一: xxxxxxx? ? ? ? ? ? ?8277019 xxx.xxxx?? ??? ? ? ?827.7019 xxx-xxxx?? ???

    2023年04月23日
    瀏覽(92)
  • android 實(shí)現(xiàn)撥打電話號碼。

    android 實(shí)現(xiàn)撥打電話號碼。

    在撥打電話號碼之前,預(yù)設(shè)一個(gè)B號碼,正常使用電話時(shí),本來輸入的是A號碼。實(shí)際撥打的是B號碼。但是接聽頁面顯示的是A號碼。是不是比較繞,在android9之前,各廠商的實(shí)現(xiàn)不了,android7以下可以實(shí)現(xiàn)。但是現(xiàn)在很多機(jī)型最低都是11以上了。 興趣使然,研究了幾天,終于出

    2024年02月14日
    瀏覽(25)
  • 電話號碼的字母組合-算法

    按電話上數(shù)字與字母的對應(yīng)關(guān)系,如2={a,b,c},3={d,e,f}等,給定一串?dāng)?shù)字如267,則求出abc,mno,qprs的所有組合,如amq,amp...cor,cos等 遍歷都可以用回溯的方式嘗試解決,每次遍歷結(jié)束后,將上一層元素刪除,滿足長度,則加入到結(jié)果中 ? ? ?

    2024年01月22日
    瀏覽(20)
  • 判斷電話號碼是否重復(fù)-excel

    判斷電話號碼是否重復(fù)-excel

    有時(shí)候重復(fù)的數(shù)據(jù)不需要或者很煩人,就需要采取措施,希望以下的方法能幫到你。 方法一: 1)針對第一個(gè)單元格輸入等號,以及公式countif(查找記錄數(shù)的范圍,需要查找的單元格) 2)輸入enter之后,然后鼠標(biāo)變?yōu)楹谏募犹柡?,往下拉自?dòng)填充,如下圖所示。 方法二:先

    2024年02月03日
    瀏覽(81)
  • Leetcode17電話號碼的組合

    Leetcode17電話號碼的組合

    思路:用字典的形式保存號碼的映射,實(shí)際組合是前一個(gè)數(shù)字串的組合加上后面一個(gè)數(shù)字的所有可能組合

    2024年02月10日
    瀏覽(24)
  • 17. 電話號碼的字母組合(回溯)

    17. 電話號碼的字母組合(回溯)

    從第一個(gè)數(shù)字開始遍歷其對應(yīng)的字母,將其加入StringBuffer中,繼續(xù)深度優(yōu)先搜索,當(dāng)訪問到最后一個(gè)數(shù)字的時(shí)候,將StringBuffer存儲到ans中,然后回溯到下一個(gè)對應(yīng)字母。 拓展: StringBuffer中的刪除對應(yīng)字符的方法是 deleteCharAt()

    2024年01月15日
    瀏覽(36)
  • leetcode 17 電話號碼字母組合

    leetcode 17 電話號碼字母組合

    給定一個(gè)僅包含數(shù)字 2-9 的字符串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。 給出數(shù)字到字母的映射如下(與電話按鍵相同)。注意 1 不對應(yīng)任何字母。 示例 1: 輸入:digits = “23” 輸出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 示

    2024年01月18日
    瀏覽(27)
  • leetcode 17. 電話號碼的字母組合

    leetcode 17. 電話號碼的字母組合

    ? ? ? ? ?該題也是經(jīng)典回溯題。 與之前做的組合有兩點(diǎn)不同: 之前的組合題是求同一集合的組合,而本題是求不同集合的組合。 本題還需要有一個(gè)將字符串?dāng)?shù)字轉(zhuǎn)換為手機(jī)號9鍵對應(yīng)字符集的過程。 ? ? ? ? 下面上代碼: ? ? ? ? 如果面試中的話要注意判斷異常輸入的情

    2024年02月16日
    瀏覽(22)
  • leetcode | 楊輝三角 | 電話號碼配對

    ? ?電話號碼的字母組合 楊輝三角? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2024年02月22日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包