国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C語(yǔ)言基于哈希表實(shí)現(xiàn)通訊錄

2020-05-23 13:32:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文為大家分享了C語(yǔ)言基于哈希表實(shí)現(xiàn)通訊錄的具體代碼,供大家參考,具體內(nèi)容如下

1.需求分析

本演示程序用C語(yǔ)言編寫(xiě),完成哈希表的生成,電話號(hào)碼的插入、以及查找等功能。
  (1)按提示輸入相應(yīng)的聯(lián)系人的相關(guān)資料;
  (2)以相應(yīng)的輸出形式輸出所存儲(chǔ)的的聯(lián)系人的資料;
  (3)程序可以達(dá)到建立、添加、查找、打印的功能;
  (4)程序可以判斷用戶(hù)輸入的非法數(shù)據(jù)并引導(dǎo)正確的輸入。

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

存儲(chǔ)電話號(hào)碼的記錄時(shí),若在存儲(chǔ)位置和其關(guān)鍵字之間建立某種確定的對(duì)應(yīng)關(guān)系使得每個(gè)關(guān)鍵字和存儲(chǔ)結(jié)構(gòu)中一個(gè)唯一的存儲(chǔ)位置相對(duì)應(yīng),那么在進(jìn)行查找時(shí),根據(jù)這個(gè)對(duì)應(yīng)關(guān)系f就可以找到給定值K的像f(K)。若存儲(chǔ)結(jié)構(gòu)中存在關(guān)接找到所查記錄。這個(gè)對(duì)應(yīng)關(guān)系f稱(chēng)為哈希(Hash)函數(shù)或散列函數(shù)。按照以上思路建立的表稱(chēng)為哈希表或散列表。本案例設(shè)計(jì)主要考察散列表的建立、查找和修改。。

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

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct node {   char num[11],name[15],address[20],city[15],etp[20];   struct node *next;   }NUM;   struct NUM *num_list[19];  int hash(char num[]) {   int i,k=0;   for(i=0;num[i]!='/0';i++)   {     k=10*k+num[i]-48;  //字符轉(zhuǎn)化為數(shù)字   }   k=(k%19);    //除余法求散列地址   return k; }//c除留余數(shù)法處理電話號(hào)碼 void create() {   struct node *p1;   int k1,m=0;   while(m==0)   {    printf("請(qǐng)輸入你想添加人的信息:num name address city etp,/n");    p1=(struct node *)malloc(sizeof(struct node));    scanf("%s",p1->num);    scanf("%s",p1->name);    scanf("%s",p1->address);    scanf("%s",p1->city);    scanf("%s",p1->etp);    k1=hash(p1->num);//用num數(shù)組值作為參數(shù)傳遞給哈希函數(shù)得到k1    p1->next=num_list[k1];//將k1得到的值作為數(shù)組的儲(chǔ)存地址賦值給頭結(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)    num_list[k1]=p1;//再將p1的數(shù)據(jù)傳遞給數(shù)組,故p1可以釋放作為下一個(gè)節(jié)點(diǎn)產(chǎn)生    printf("結(jié)束請(qǐng)按1,再次輸入請(qǐng)按0/n");    scanf("%d",&m);   }   printf("通訊表已經(jīng)創(chuàng)建/n"); }   void dlter() {    char num[11];   int k1;   int find=0;   struct node *f;     printf("請(qǐng)查詢(xún)要修改的聯(lián)系人的電話:/n:");     scanf("%s",num);     k1=hash(num);     f=num_list[k1];     while(f!=NULL)     {       if(strcmp(f->num,num)==0)       {        printf("查找到了!請(qǐng)輸入要修改的人的資料:/n");        scanf("%s%s%s",f->num,f->name,f->address,f->city,f->etp);        find=1;       }       f=f->next;     }     if(find=0)       printf("沒(méi)有找到要?jiǎng)h除的節(jié)點(diǎn)!");     } void list() {   struct node *f;//打印節(jié)點(diǎn)指針   int i;    printf("打印通訊錄如下:/n");   for(i=0;i<19;i++)     {       f=num_list[i];       while(f!=NULL)       {         printf("--->num:%s/t name:%s/t address:%s/t city:%s/t etp:%s/t /n",f->num,f->name,f->address,f->city,f->etp);         f=f->next;        }     }    }   void add() {   char num[11],name[15],address[20],city[15],etp[20];   struct node *p1;   int k1;   printf("請(qǐng)輸入新添加的人的信息:電話 姓名 地址 城市 郵箱/n");    p1=(struct node *)malloc(sizeof(struct node));    scanf("%s%s%s",num,name,address);   strcpy(p1->num,num);   strcpy(p1->name,name);   strcpy(p1->address,address);   strcpy(p1->city,city);   strcpy(p1->etp,etp);   k1=hash(p1->num);   p1->next=num_list[k1];   num_list[k1]=p1;    printf("ok/n"); } void search() {   char num[11];   int k1;   int find=0;   struct node *f;     printf("請(qǐng)輸入查詢(xún)?nèi)说碾娫捥?hào)碼:");     scanf("%s",num);     k1=hash(num);     f=num_list[k1];     while(f!=NULL)     {       if(strcmp(f->num,num)==0)       {         printf("所要查找的聯(lián)系人信息 :num:%s name:%s address:%s city:%s etp:%s/n",f->num,f->name,f->address,f->city,f->etp);         find=1;       }       f=f->next;     }     if(find=0)       printf("此聯(lián)系人沒(méi)有找到!");     } void main() {   int i;   char x;   for(i=0;i<19;i++)   {     num_list[i]=NULL;   }   while(1)   {  //          system("cls");           printf("/n");         printf("★★★★★★★★★通訊錄★★★★★★★★★/n");         printf("★◆----------------------------------◆★/n");         printf("★|       1.建立       |★/n");         printf("★|                 |★/n");         printf("★|       2.查找       |★/n");         printf("★|                 |★/n");         printf("★|       3.添加       |★/n");         printf("★|                 |★/n");         printf("★|       4.修改       |★/n");         printf("★|                 |★/n");         printf("★|       5.打印       |★/n");         printf("★|                 |★/n");         printf("★|       6.結(jié)束       |★/n");         printf("★◆----------------------------------◆★/n");         printf("★★★★★★★★★★★★★★★★★★★★★/n");  //    x=getchar();     scanf("%s",&x);     switch(x)     {       case '1': create();break;       case '2': search();break;       case '3': add();break;       case '4': dlter();break;       case '5': list();break;       case '6': return;       default:printf("請(qǐng)重新輸入;/n");     }   } } 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武城县| 白沙| 喀喇沁旗| 大安市| 万州区| 湖北省| 衢州市| 汝州市| 永丰县| 云龙县| 集安市| 甘南县| 台北县| 德令哈市| 晋州市| 广宁县| 本溪市| 上林县| 盐池县| 朝阳县| 汉中市| 永丰县| 班戈县| 越西县| 兖州市| 襄汾县| 秭归县| 隆安县| 永新县| 胶州市| 社会| 榆社县| 新竹县| 柘城县| 通化县| 安吉县| 贵港市| 高青县| 额济纳旗| 姜堰市| 仙游县|