数据结构 :电话号码查询系统的设计与实现

#include

#include

#include

#define MAX_NAME 10

#define TABLE_SIZE 10

typedef char KeyType[MAX_NAME];

typedef  long long int InfoType;

typedef struct HNode {

    KeyType name;

    InfoType otherinfo;

    struct HNode* next;

} HNode;

typedef HNode* HashTable[TABLE_SIZE]; 

void Create_HT(HashTable HT) {

    for (int i = 0; i < TABLE_SIZE; i++) 

    {

        HT[i] = NULL;

    }

}

int hash(KeyType name) {

    int hashval = 0;

    for (int i = 0; name[i] != ‘\0’; i++) {

        hashval = (hashval * 33 + name[i]) % TABLE_SIZE;

    }

    return hashval;

}

//插入新记录 

void Insert_HT(HashTable HT) {

    HNode* p = (HNode*)malloc(sizeof(HNode));

    if (p == NULL) {

        printf(“内存分配失败\n”);

        return;

    }

    printf(“请输入姓名:”);

    scanf(“%s”, p->name);  

    printf(“请输入电话号码:”);

    scanf(“%lld”, &p->otherinfo);

    p->next = NULL;

    int address = hash(p->name);

    if (HT[address] == NULL) {

        HT[address] = p;

    }

    else {

        p->next = HT[address];

        HT[address] = p;

    }

}

//删除 

void Delete_HT(HashTable HT, KeyType key) {

    int address = hash(key);

    HNode* p = HT[address];

    HNode* pre = NULL;

    while (p != NULL) {

        if (strcmp(p->name, key) == 0) {

            if (pre == NULL) {

                HT[address] = p->next;

            }

            else {

                pre->next = p->next;

            }

            free(p);

            printf(“删除成功\n”);

            return;

        }

        pre = p;

        p = p->next;

    }

    printf(“未找到对应记录\n”);

}

//查找 

void Search_HT(HashTable HT, KeyType key) {

    int address = hash(key);

    HNode* p = HT[address];

    while (p != NULL) {

        if (strcmp(p->name, key) == 0) {

            printf(“姓名:%s, 电话号码:%lld\n”, p->name, p->otherinfo);

            return;

        }

        p = p->next;

    }

    printf(“未找到对应记录\n”);

}

//修改 

void Modify_HT(HashTable HT, KeyType key) {

    int address = hash(key);

    HNode* p = HT[address];

    while (p != NULL) {

        if (strcmp(p->name, key) == 0) {

            printf(“请输入新的电话号码:”);

            scanf(“%d”, &p->otherinfo);

            printf(“修改成功\n”);

            return;

        }

        p = p->next;

    }

    printf(“未找到对应记录\n”);

}

//打印 

void Print_HT(HashTable HT) {

    printf(“——用户记录如下——\n”);

    int a=0;  

    for (int i = 0; i < TABLE_SIZE; i++)

     {

        HNode* p = HT[i];

        while(p != NULL) {

            a=1;

            printf(“姓名:%s, 电话号码:%lld\n”, p->name, p->otherinfo);

            p = p->next;

        }

    }

    if(a==0)

        {

            printf(“无用户记录\n”);

        }

}

            

            

int OperateMenu() {

    int choice;

    printf(“——–菜单——–\n”);

    printf(“1. 插入新记录\n”);

    printf(“2. 删除记录\n”);

    printf(“3. 查找记录\n”);

    printf(“4. 修改记录\n”);

    printf(“5. 打印记录\n”);

    printf(“0. 退出\n”);

    printf(“——————–\n”);

    printf(“请选择操作:”);

    scanf(“%d”, &choice);

    return choice;

}

int main() {

    HashTable HT;

   Create_HT(HT);

    int choice = 1;

    while (choice != 0) {

        choice = OperateMenu();

        switch (choice) {

        case 1:

            Insert_HT(HT);

            break;

        case 2: {

            KeyType key;

            printf(“请输入要删除的姓名:”);

            scanf(“%s”, &key);

            Delete_HT(HT, key);

            break;

        }

        case 3: {

            KeyType key;

            printf(“请输入要查找的姓名:”);

            scanf(“%s”, &key);

            Search_HT(HT, key);

            break;

        }

        case 4: {

            KeyType key;

            printf(“请输入要修改的姓名:”);

            scanf(“%s”, &key);

            Modify_HT(HT, key);

            break;

        }

        case 5:

            Print_HT(HT);

            break;

        default:

            if (choice != 0) {

                printf(“请输入正确的操作代码!\n”);

            }

            break;

        }

    }

    return 0;

}

数据结构 :电话号码查询系统的设计与实现

数据结构 :电话号码查询系统的设计与实现

这段代码实现了一个基于哈希表的简单电话录入程序。以下是一些注意事项:

  1. 代码中使用了一个 HashTable 结构体数组,每个元素都指向一个 HNode 链表。每个 HNode 结构体存储一个姓名和电话号码。

  2. 定义了常量 MAX_NAME 和 TABLE_SIZE,分别表示姓名的最大长度和哈希表的大小。

  3. Create_HT 函数用于创建一个空的哈希表,初始化所有链表头节点为空。

  4. hash 函数根据姓名计算出对应的哈希值,用于确定应该将元素插入到哈希表的哪个位置。

  5. Insert_HT 函数用于向哈希表中插入新的记录。它首先从用户输入中读取一个新的姓名和电话号码,然后根据姓名计算哈希值,将新节点插入到对应的链表头。

  6. Delete_HT 函数根据姓名从哈希表中删除对应的记录。它首先计算姓名的哈希值,然后遍历对应的链表,找到对应节点并删除。

  7. Search_HT 函数根据姓名在哈希表中查找对应的记录。它首先计算姓名的哈希值,然后遍历对应的链表,找到对应节点并打印其姓名和电话号码。

  8. Modify_HT 函数根据姓名修改哈希表中对应的记录的电话号码。它首先计算姓名的哈希值,然后遍历对应的链表,找到对应节点并修改电话号码。

  9. Print_HT 函数用于打印哈希表中的所有记录。

  10. OperateMenu 函数用于显示操作菜单,并返回用户选择的操作代码。

  11. main 函数是程序的入口点,它初始化哈希表,然后根据用户选择执行不同的操作,直到用户选择退出为止。

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/9dbb30243d.html