数据结构 哈希表 拉链法创建通讯录

目录

0.功能

1预处理

2 函数声明区

3 电话号码哈希函数(哈希函数)

4 姓名哈希函数(哈希函数)

5 置空函数

6 头插法插入哈希表

7 建立哈希姓名表

8 覆盖建立哈希姓名表

9 搜索姓名函数

10 创建拉链式哈希表(电话号码)

11 打印哈希表拉链

12 覆盖电话号码哈希表

13 搜索电话号码函数

14 删除姓名函数

15 修改功能菜单函数

16 switch函数

17 全部代码


0.功能

        printf("-----------------------------------------------\n");
        printf("-------------------功能菜单--------------------\n");
        printf("--------------1.建立电话号码哈希表-------------\n");
        printf("--------------2.建立姓名序列哈希表-------------\n");
        printf("-------------3.打印通讯录全部成员--------------\n");
        printf("----4.查找通讯录(手机号)并可选择打印全部信息---\n");
        printf("-----5.查找通讯录(姓名)并可选择打印全部信息----\n");
        printf("------------------6.删除姓名-------------------\n");
        printf("-----------7.在同学录中添加新的人员------------\n");
        printf("----------8.修改除姓名以外的全部属性-----------\n");
        printf("-----------------------------------------------\n");

1预处理

    typedef struct
    {
        char name[100];
        char TelephoneNumber01[20];
        char TelephoneNumber02[20];
        char QQNumber[20];
        char Address[100];
        char YouXiang[100];
    }People;
    typedef struct Node
    {
        People Info;
        Node *next;
    }Node;

    #include
    #include
    #include

2 函数声明区

    int hashnum(int num);//电话号码哈希函数
    int hashname(int num);//姓名哈希函数
    void InitHash(Node *Hash[]);//置空函数
    void TouChaFa(Node *Hash[],People value,int code);//头插法插入哈希表
    void CreatHashTableName(Node *Hash[],People value,char o);//建立哈希姓名表
    void RecoverHashTableName(Node *Hash[],People people[],char o,int k);//覆盖建立哈希姓名表
    int searchName(Node *Hash[],Node *&a);//搜索姓名函数
    void CreatHashTable(Node *Hash[],People value,char o);//创建拉链式哈希表(电话号码)
    void PrintHashTable(Node *Hash[]);//打印哈希表拉链
    void RecoverHashTable(Node *Hash[],People people[],char o,int k);//覆盖电话号码哈希表
    int searchNum(Node *Hash[],Node *&a);//搜索电话号码函数
    void DeleteName(Node *Hash[]);//删除姓名函数
    void pro();//总功能菜单函数
    void pro2();//修改功能菜单函数
    void swi(Node *Hash[],People people[],int k);//switch函数

3 电话号码哈希函数(哈希函数)

    int hashnum(int num)
    {
        return num%10;
    }

4 姓名哈希函数(哈希函数)

    int hashname(int num)
    {
        if(num<0)
            return -1*num%10;
        else
            return num%10;
    }

5 置空函数

    void InitHash(Node *Hash[])
    {
        for(int i=0;i<=9;i++)
        {
            Hash[i]=(Node *)malloc(sizeof(Node));
            Hash[i]->next=NULL;    
        }
    }

6 头插法插入哈希表

    void TouChaFa(Node *Hash[],People value,int code)
    {
        Node *p;
        p=(Node *)malloc(sizeof(Node));
        p->Info=value;
        p->next=Hash[code]->next;
        Hash[code]->next=p;
    }

7 建立哈希姓名表

    void CreatHashTableName(Node *Hash[],People value,char o)
    {
        int l = int(o);
        int j=hashname(l);
        TouChaFa(Hash,value,j);
    }

8 覆盖建立哈希姓名表

    void RecoverHashTableName(Node *Hash[],People people[],char o,int k)
    {
        int i;
            for(i=0;i

9 搜索姓名函数

    int searchName(Node *Hash[],Node *&a)
    {
        int q,p;
        //Node *a;
        char o[100];
        printf("想要查找人的电话是:");
        scanf("%s",&o);
        printf("\n");
        p=int(o[0]);
        q=hashname(p);
        a=Hash[q];
        while(a)
        {
            if(!strcmp(o,a->Info.name))
            {
                return 1;
            }
            a=a->next;
        }
        return 0;
    }

10 创建拉链式哈希表(电话号码)

    void CreatHashTable(Node *Hash[],People value,char o)
    {
        int l = int(o);
        int j=hashnum(l);
        TouChaFa(Hash,value,j);
    }

11 打印哈希表拉链

    void PrintHashTable(Node *Hash[])
    {
        int i;
        for(i=0;i<10;i++)
        {
            printf("[%d]",i);
            Node *p = (Node *)malloc(sizeof(Node));
            p=Hash[i];
            while(p->next!=NULL)
            {    
                p=p->next;   
                printf(" -> %s",p->Info.name);

            }
            printf(" -> NULL");
            printf("\n");
        }
    }

12 覆盖电话号码哈希表

    void RecoverHashTable(Node *Hash[],People people[],char o,int k)
    {
        int i;
            for(i=0;i

13 搜索电话号码函数

    int searchNum(Node *Hash[],Node *&a)
    {
        int q,p;
        //Node *a;
        char o[100];
        printf("想要查找人的电话是:");
        scanf("%s",&o);
        printf("\n");
        p=int(o[0]);
        q=hashnum(p);
        a=Hash[q];
        while(a)
        {
            if(!strcmp(o,a->Info.TelephoneNumber01))
            {
                return 1;
            }
            a=a->next;
        }
        return 0;
    }

14 删除姓名函数

    void DeleteName(Node *Hash[])
    {
        Node *p,*pre,*q;
        int i,o=0,k=1,x;
        char l[100];
        printf("想要删除的元素是:");
        scanf("%s",&l);
        printf("\n");
        x=int(l[0]);
        i=hashname(x);
        p=Hash[i];
        q=Hash[i];
        while(p)
        {   
            o++;
            if(!strcmp(l,p->Info.name))
                break;
            p=p->next;
        }
        while(q&&knext;
            k++;
        }
        if(o>1)
        {
        printf("删除的元素是 %s\n",p->Info.name);
        q->next=q->next->next;
        free(p);
        }else{
        printf("删除的元素是 %s\n",p->Info.name);
        free(p);
        Hash[i]=NULL;        
        }
        printf("删除成功\n");
    }

15 修改功能菜单函数

    void pro2()
    {
        printf("--------------------\n");
        printf("----修改功能菜单----\n");
        printf("---0.退出修改程序---\n");
        printf("----1.电话号码01----\n");
        printf("----2.电话号码02----\n");
        printf("-------3.QQ号-------\n");
        printf("-------4.地址-------\n");
        printf("-------5.邮箱-------\n");
        printf("--------------------\n");
    }

16 switch函数

void swi(Node *Hash[],People people[],int k)
    {
        int n,i;
        int flag=0;
        char s;
        Node *a=NULL;    
        pro();
        printf("请输入功能数字: ");

        scanf("%d",&n);
        printf("\n");
        while(n)
        {
            switch(n)
            {
                case 0:
                    n=0;
                    break;
                case 1:
                    if(flag==0)
                    {
                    InitHash(Hash);
                    RecoverHashTable(Hash,people,people[i].TelephoneNumber01[0],k);
                    printf("电话号码01通讯录建立成功\n");
                    flag=1;
                    }else if(flag==2){
                        printf("已经建立了姓名通讯录\n");
                    }else{
                        printf("已经建立过了\n");
                    }
                    break;
                case 2:
                    if(flag==0)
                    {
                    InitHash(Hash);
                    RecoverHashTableName(Hash,people,people[i].name[0],k);
                    printf("姓名通讯录建立成功\n");
                    flag=2;
                    }else if(flag==1)
                    {
                        printf("已经建立了电话号码通讯录\n");
                    }else{
                        printf("已经建立过了\n");
                    }
                    break;
                case 3:
                    if(flag==0)
                    {
                        printf("在进行操作三之前需要完成操作一或二\n");
                    }else{
                    PrintHashTable(Hash);
                    }
                    break;
                case 4:
                    if(flag==1)
                    {
                        if(searchNum(Hash,a)){
                            printf("通讯录中存在这个人,这是%s的电话号码1\n",a->Info.name);
                            printf("是否打印这个人的全部信息(Y或N): ");
                            fflush(stdin);
                            scanf("%c",&s);
                            if(s=='Y')
                            {
                                printf("名字:%s\n",a->Info.name);
                                printf("电话号码01:%s\n",a->Info.TelephoneNumber01);
                                printf("电话号码02:%s\n",a->Info.TelephoneNumber02);
                                printf("QQ号:%s\n",a->Info.QQNumber);
                                printf("地址:%s\n",a->Info.Address);
                                printf("QQ邮箱:%s\n",a->Info.YouXiang);
                            }
                        }else{
                            printf("通讯录中不存在这个人\n");
                        }
                    }else if(flag==2)
                    {
                        printf("您建立是姓名通讯录,请重新输入\n");
                    }else{
                        printf("在进行操作四之前完成操作一\n");
                    }
                    break;
                case 5:
                    if(flag==2)
                    {
                        if(searchName(Hash,a)){
                            printf("通讯录中存在:%s\n",a->Info.name);
                            printf("是否打印这个人的全部信息(Y或N): ");
                            fflush(stdin);
                            scanf("%c",&s);
                            if(s=='Y')
                            {
                                printf("名字:%s\n",a->Info.name);
                                printf("电话号码01:%s\n",a->Info.TelephoneNumber01);
                                printf("电话号码02:%s\n",a->Info.TelephoneNumber02);
                                printf("QQ号:%s\n",a->Info.QQNumber);
                                printf("地址:%s\n",a->Info.Address);
                                printf("QQ邮箱:%s\n",a->Info.YouXiang);
                            }
                        }else{
                            printf("通讯录中不存在这个人\n");
                        }
                    }else if(flag==1)
                    {
                        printf("您建立是电话号码通讯录,请重新输入\n");
                    }else{
                        printf("在进行操作五之前完成操作二\n");
                    }
                    break;
                case 6:
                    if(flag==0)
                    {
                        printf("在进行操作六之前需要完成操作一或二\n");
                    }else if(flag==1){
                        printf("您建立是电话号码通讯录,请重新输入\n");
                    }else{
                        DeleteName(Hash);
                    }
                    break;
                case 7:
                    if(flag==2)
                    {
                        Node *p;
                        p=(Node *)malloc(sizeof(Node));
                        printf("请输入姓名:");
                        scanf("%s",p->Info.name);
                        printf("\n");
                        printf("请输入电话号码01:");
                        scanf("%s",p->Info.TelephoneNumber01);
                        printf("\n");
                        printf("请输入电话号码02:");
                        scanf("%s",p->Info.TelephoneNumber02);
                        printf("\n");
                        printf("请输入QQ号码:");
                        scanf("%s",p->Info.QQNumber);
                        printf("\n");
                        printf("请输入地址:");
                        scanf("%s",p->Info.Address);
                        printf("\n");
                        printf("请输入邮箱:");
                        scanf("%s",p->Info.YouXiang);
                        printf("\n");
                        CreatHashTableName(Hash,p->Info,p->Info.name[0]);
                        printf("插入成功\n");
                    }else if(flag==1)
                    {
                        printf("您建立是电话号码通讯录,请重新输入\n");
                    }else{
                        printf("在进行操作七之前需要完成操作二\n");
                    }
                    break;
                case 8:
                    if(flag==2)
                    {
                        Node *t;
                        int u;
                        searchName(Hash,t);
                        pro2();
                        printf("你想要修改的内容编号是:");
                        scanf("%d",&u);
                        printf("\n");
                        while(u)
                        {
                            switch(u)
                            {
                                case 0:
                                    u=0;
                                    break;
                                case 1:
                                    printf("请输入新的电话号码01: ");
                                    scanf("%s",t->Info.TelephoneNumber01);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 2:
                                    printf("请输入新的电话号码02: ");
                                    scanf("%s",t->Info.TelephoneNumber02);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 3:
                                    printf("请输入新的QQ号:");
                                    scanf("%s",t->Info.QQNumber);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 4:
                                    printf("请输入新的地址:");
                                    scanf("%s",t->Info.Address);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 5:
                                    printf("请输入新的邮箱: ");
                                    scanf("%s",t->Info.YouXiang);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                default :
                                    printf("输入错误,请重新输入,输入范围(0~5)");
                        }  
                        printf("\n\n");              
                        pro2();
                        printf("你想要修改的内容编号是:");
                        scanf("%d",&u);
                        printf("\n");
                        }
                    }else if(flag==1)
                    {
                        printf("您建立是姓名通讯录,请重新输入\n");
                    }else
                    {
                        printf("在进行操作八之前需要进行操作二\n");
                    }
                    break;
                default:
                    printf("输入错误\n");
            }
            printf("\n\n\n");
            pro();
            printf("请输入功能数字: ");
            scanf("%d",&n);
            printf("\n");
        }
    }


17 全部代码

    typedef struct
    {
        char name[100];
        char TelephoneNumber01[20];
        char TelephoneNumber02[20];
        char QQNumber[20];
        char Address[100];
        char YouXiang[100];
    }People;
    typedef struct Node
    {
        People Info;
        Node *next;
    }Node;

    #include
    #include
    #include

    int hashnum(int num);//电话号码哈希函数
    int hashname(int num);//姓名哈希函数
    void InitHash(Node *Hash[]);//置空函数
    void TouChaFa(Node *Hash[],People value,int code);//头插法插入哈希表
    void CreatHashTableName(Node *Hash[],People value,char o);//建立哈希姓名表
    void RecoverHashTableName(Node *Hash[],People people[],char o,int k);//覆盖建立哈希姓名表
    int searchName(Node *Hash[],Node *&a);//搜索姓名函数
    void CreatHashTable(Node *Hash[],People value,char o);//创建拉链式哈希表(电话号码)
    void PrintHashTable(Node *Hash[]);//打印哈希表拉链
    void RecoverHashTable(Node *Hash[],People people[],char o,int k);//覆盖电话号码哈希表
    int searchNum(Node *Hash[],Node *&a);//搜索电话号码函数
    void DeleteName(Node *Hash[]);//删除姓名函数
    void pro();//总功能菜单函数
    void pro2();//修改功能菜单函数
    void swi(Node *Hash[],People people[],int k);//switch函数

    //主函数
    int main()
    {
        int k,i;
        People people[100];
        Node *Hash[10];
        printf("就目前来说,需要录入通讯录的有几个人: ");
        scanf("%d",&k);
        printf("\n");
        for(i=0;inext=NULL;    
        }
    }

    //头插法插入哈希表
    void TouChaFa(Node *Hash[],People value,int code)
    {
        Node *p;
        p=(Node *)malloc(sizeof(Node));
        p->Info=value;
        p->next=Hash[code]->next;
        Hash[code]->next=p;
    }

    //建立哈希姓名表
    void CreatHashTableName(Node *Hash[],People value,char o)
    {
        int l = int(o);
        int j=hashname(l);
        TouChaFa(Hash,value,j);
    }

    //覆盖建立哈希姓名表
    void RecoverHashTableName(Node *Hash[],People people[],char o,int k)
    {
        int i;
            for(i=0;iInfo.name))
            {
                return 1;
            }
            a=a->next;
        }
        return 0;
    }

    //创建拉链式哈希表(电话号码)
    void CreatHashTable(Node *Hash[],People value,char o)
    {
        int l = int(o);
        int j=hashnum(l);
        TouChaFa(Hash,value,j);
    }

    //打印哈希表拉链
    void PrintHashTable(Node *Hash[])
    {
        int i;
        for(i=0;i<10;i++)
        {
            printf("[%d]",i);
            Node *p = (Node *)malloc(sizeof(Node));
            p=Hash[i];
            while(p->next!=NULL)
            {    
                p=p->next;   
                printf(" -> %s",p->Info.name);

            }
            printf(" -> NULL");
            printf("\n");
        }
    }

    //覆盖电话号码哈希表
    void RecoverHashTable(Node *Hash[],People people[],char o,int k)
    {
        int i;
            for(i=0;iInfo.TelephoneNumber01))
            {
                return 1;
            }
            a=a->next;
        }
        return 0;
    }

    //删除姓名函数
    void DeleteName(Node *Hash[])
    {
        Node *p,*pre,*q;
        int i,o=0,k=1,x;
        char l[100];
        printf("想要删除的元素是:");
        scanf("%s",&l);
        printf("\n");
        x=int(l[0]);
        i=hashname(x);
        p=Hash[i];
        q=Hash[i];
        while(p)
        {   
            o++;
            if(!strcmp(l,p->Info.name))
                break;
            p=p->next;
        }
        while(q&&knext;
            k++;
        }
        if(o>1)
        {
        printf("删除的元素是 %s\n",p->Info.name);
        q->next=q->next->next;
        free(p);
        }else{
        printf("删除的元素是 %s\n",p->Info.name);
        free(p);
        Hash[i]=NULL;        
        }
        printf("删除成功\n");
    }

    //总功能菜单函数
    void pro()
    {
        printf("-----------------------------------------------\n");
        printf("-------------------功能菜单--------------------\n");
        printf("--------------1.建立电话号码哈希表-------------\n");
        printf("--------------2.建立姓名序列哈希表-------------\n");
        printf("-------------3.打印通讯录全部成员--------------\n");
        printf("----4.查找通讯录(手机号)并可选择打印全部信息---\n");
        printf("-----5.查找通讯录(姓名)并可选择打印全部信息----\n");
        printf("------------------6.删除姓名-------------------\n");
        printf("-----------7.在同学录中添加新的人员------------\n");
        printf("----------8.修改除姓名以外的全部属性-----------\n");
        printf("-----------------------------------------------\n");
    }

    //修改功能菜单函数
    void pro2()
    {
        printf("--------------------\n");
        printf("----修改功能菜单----\n");
        printf("---0.退出修改程序---\n");
        printf("----1.电话号码01----\n");
        printf("----2.电话号码02----\n");
        printf("-------3.QQ号-------\n");
        printf("-------4.地址-------\n");
        printf("-------5.邮箱-------\n");
        printf("--------------------\n");
    }

    //switch函数
    void swi(Node *Hash[],People people[],int k)
    {
        int n,i;
        int flag=0;
        char s;
        Node *a=NULL;    
        pro();
        printf("请输入功能数字: ");

        scanf("%d",&n);
        printf("\n");
        while(n)
        {
            switch(n)
            {
                case 0:
                    n=0;
                    break;
                case 1:
                    if(flag==0)
                    {
                    InitHash(Hash);
                    RecoverHashTable(Hash,people,people[i].TelephoneNumber01[0],k);
                    printf("电话号码01通讯录建立成功\n");
                    flag=1;
                    }else if(flag==2){
                        printf("已经建立了姓名通讯录\n");
                    }else{
                        printf("已经建立过了\n");
                    }
                    break;
                case 2:
                    if(flag==0)
                    {
                    InitHash(Hash);
                    RecoverHashTableName(Hash,people,people[i].name[0],k);
                    printf("姓名通讯录建立成功\n");
                    flag=2;
                    }else if(flag==1)
                    {
                        printf("已经建立了电话号码通讯录\n");
                    }else{
                        printf("已经建立过了\n");
                    }
                    break;
                case 3:
                    if(flag==0)
                    {
                        printf("在进行操作三之前需要完成操作一或二\n");
                    }else{
                    PrintHashTable(Hash);
                    }
                    break;
                case 4:
                    if(flag==1)
                    {
                        if(searchNum(Hash,a)){
                            printf("通讯录中存在这个人,这是%s的电话号码1\n",a->Info.name);
                            printf("是否打印这个人的全部信息(Y或N): ");
                            fflush(stdin);
                            scanf("%c",&s);
                            if(s=='Y')
                            {
                                printf("名字:%s\n",a->Info.name);
                                printf("电话号码01:%s\n",a->Info.TelephoneNumber01);
                                printf("电话号码02:%s\n",a->Info.TelephoneNumber02);
                                printf("QQ号:%s\n",a->Info.QQNumber);
                                printf("地址:%s\n",a->Info.Address);
                                printf("QQ邮箱:%s\n",a->Info.YouXiang);
                            }
                        }else{
                            printf("通讯录中不存在这个人\n");
                        }
                    }else if(flag==2)
                    {
                        printf("您建立是姓名通讯录,请重新输入\n");
                    }else{
                        printf("在进行操作四之前完成操作一\n");
                    }
                    break;
                case 5:
                    if(flag==2)
                    {
                        if(searchName(Hash,a)){
                            printf("通讯录中存在:%s\n",a->Info.name);
                            printf("是否打印这个人的全部信息(Y或N): ");
                            fflush(stdin);
                            scanf("%c",&s);
                            if(s=='Y')
                            {
                                printf("名字:%s\n",a->Info.name);
                                printf("电话号码01:%s\n",a->Info.TelephoneNumber01);
                                printf("电话号码02:%s\n",a->Info.TelephoneNumber02);
                                printf("QQ号:%s\n",a->Info.QQNumber);
                                printf("地址:%s\n",a->Info.Address);
                                printf("QQ邮箱:%s\n",a->Info.YouXiang);
                            }
                        }else{
                            printf("通讯录中不存在这个人\n");
                        }
                    }else if(flag==1)
                    {
                        printf("您建立是电话号码通讯录,请重新输入\n");
                    }else{
                        printf("在进行操作五之前完成操作二\n");
                    }
                    break;
                case 6:
                    if(flag==0)
                    {
                        printf("在进行操作六之前需要完成操作一或二\n");
                    }else if(flag==1){
                        printf("您建立是电话号码通讯录,请重新输入\n");
                    }else{
                        DeleteName(Hash);
                    }
                    break;
                case 7:
                    if(flag==2)
                    {
                        Node *p;
                        p=(Node *)malloc(sizeof(Node));
                        printf("请输入姓名:");
                        scanf("%s",p->Info.name);
                        printf("\n");
                        printf("请输入电话号码01:");
                        scanf("%s",p->Info.TelephoneNumber01);
                        printf("\n");
                        printf("请输入电话号码02:");
                        scanf("%s",p->Info.TelephoneNumber02);
                        printf("\n");
                        printf("请输入QQ号码:");
                        scanf("%s",p->Info.QQNumber);
                        printf("\n");
                        printf("请输入地址:");
                        scanf("%s",p->Info.Address);
                        printf("\n");
                        printf("请输入邮箱:");
                        scanf("%s",p->Info.YouXiang);
                        printf("\n");
                        CreatHashTableName(Hash,p->Info,p->Info.name[0]);
                        printf("插入成功\n");
                    }else if(flag==1)
                    {
                        printf("您建立是电话号码通讯录,请重新输入\n");
                    }else{
                        printf("在进行操作七之前需要完成操作二\n");
                    }
                    break;
                case 8:
                    if(flag==2)
                    {
                        Node *t;
                        int u;
                        searchName(Hash,t);
                        pro2();
                        printf("你想要修改的内容编号是:");
                        scanf("%d",&u);
                        printf("\n");
                        while(u)
                        {
                            switch(u)
                            {
                                case 0:
                                    u=0;
                                    break;
                                case 1:
                                    printf("请输入新的电话号码01: ");
                                    scanf("%s",t->Info.TelephoneNumber01);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 2:
                                    printf("请输入新的电话号码02: ");
                                    scanf("%s",t->Info.TelephoneNumber02);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 3:
                                    printf("请输入新的QQ号:");
                                    scanf("%s",t->Info.QQNumber);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 4:
                                    printf("请输入新的地址:");
                                    scanf("%s",t->Info.Address);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                case 5:
                                    printf("请输入新的邮箱: ");
                                    scanf("%s",t->Info.YouXiang);
                                    printf("\n");
                                    printf("修改成功\n");
                                    break;
                                default :
                                    printf("输入错误,请重新输入,输入范围(0~5)");
                        }  
                        printf("\n\n");              
                        pro2();
                        printf("你想要修改的内容编号是:");
                        scanf("%d",&u);
                        printf("\n");
                        }
                    }else if(flag==1)
                    {
                        printf("您建立是姓名通讯录,请重新输入\n");
                    }else
                    {
                        printf("在进行操作八之前需要进行操作二\n");
                    }
                    break;
                default:
                    printf("输入错误\n");
            }
            printf("\n\n\n");
            pro();
            printf("请输入功能数字: ");
            scanf("%d",&n);
            printf("\n");
        }
    }


你可能感兴趣的:(数据结构,散列表)