真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言中如何利用哈希表實(shí)現(xiàn)通訊錄

這篇“C語言中如何利用哈希表實(shí)現(xiàn)通訊錄”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C語言中如何利用哈希表實(shí)現(xiàn)通訊錄”文章吧。

10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有阿榮免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1.需求分析

本演示程序用C語言編寫,完成哈希表的生成,電話號(hào)碼的插入、以及查找等功能。
(1)按提示輸入相應(yīng)的聯(lián)系人的相關(guān)資料;
(2)以相應(yīng)的輸出形式輸出所存儲(chǔ)的的聯(lián)系人的資料;
(3)程序可以達(dá)到建立、添加、查找、打印的功能;
(4)程序可以判斷用戶輸入的非法數(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稱為哈希(Hash)函數(shù)或散列函數(shù)。按照以上思路建立的表稱為哈希表或散列表。本案例設(shè)計(jì)主要考察散列表的建立、查找和修改。。

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

#include 
#include 
#include 
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)查詢要修改的聯(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("沒有找到要?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)輸入查詢?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)系人沒有找到!"); 
 
 
  } 
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"); 
    } 
  } 
}

以上就是關(guān)于“C語言中如何利用哈希表實(shí)現(xiàn)通訊錄”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前名稱:C語言中如何利用哈希表實(shí)現(xiàn)通訊錄
本文網(wǎng)址:http://weahome.cn/article/gcgodj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部