最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年02月15日 10:46:28   作者:cola??  
這篇文章主要為大家詳細(xì)介紹了C語言基于哈希表實現(xiàn)通訊錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

1.需求分析

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

2.概要設(shè)計

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

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

#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ù)法處理電話號碼 
void create() 
{ 
  struct node *p1; 
  int k1,m=0; 
  while(m==0) 
  { 
   printf("請輸入你想添加人的信息: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ù)組的儲存地址賦值給頭結(jié)點的下一個節(jié)點 
   num_list[k1]=p1;//再將p1的數(shù)據(jù)傳遞給數(shù)組,故p1可以釋放作為下一個節(jié)點產(chǎn)生 
   printf("結(jié)束請按1,再次輸入請按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("請查詢要修改的聯(lián)系人的電話:\n:"); 
    scanf("%s",num); 
    k1=hash(num); 
    f=num_list[k1]; 
    while(f!=NULL) 
    { 
      if(strcmp(f->num,num)==0) 
      { 
       printf("查找到了!請輸入要修改的人的資料:\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é)點!"); 
 
 
  } 
void list() 
{ 
  struct node *f;//打印節(jié)點指針 
  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("請輸入新添加的人的信息:電話 姓名 地址 城市 郵箱\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("請輸入查詢?nèi)说碾娫捥柎a:"); 
    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("請重新輸入;\n"); 
    } 
  } 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ 內(nèi)聯(lián)函數(shù)詳解

    C++ 內(nèi)聯(lián)函數(shù)詳解

    內(nèi)聯(lián)函數(shù)是c++為了提高程序的運行速度做的改進(jìn),本片文章詳細(xì)介紹了C++ 的內(nèi)聯(lián)函數(shù),本文就來詳細(xì)的介紹一下,感興趣的朋友可以了解一下
    2021-11-11
  • C++中將string類型轉(zhuǎn)化為int類型

    C++中將string類型轉(zhuǎn)化為int類型

    本文主要介紹了C++中將string類型轉(zhuǎn)化為int類型的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解

    C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-09-09
  • C++ 中 vector 的常用操作方法匯總

    C++ 中 vector 的常用操作方法匯總

    在C++的STL中,vector是一個動態(tài)數(shù)組,可以在運行時調(diào)整大小,本文介紹了vector的初始化、元素訪問、修改、迭代器操作、容量管理以及性能優(yōu)化技巧,通過這些操作,可以有效地使用vector管理數(shù)據(jù),本文介紹C++  vector 操作,感興趣的朋友一起看看吧
    2024-10-10
  • C語言數(shù)據(jù)的存儲詳解

    C語言數(shù)據(jù)的存儲詳解

    本文詳細(xì)講解了C語言數(shù)據(jù)的存儲,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C語言字符串大小比較

    C語言字符串大小比較

    本文給大家分享給大家的是C語言的字符串大小比較的函數(shù),有需要的小伙伴可以參考下。
    2015-07-07
  • 如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++)

    如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++)

    這篇文章主要介紹了如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語言深入細(xì)致講解動態(tài)內(nèi)存管理

    C語言深入細(xì)致講解動態(tài)內(nèi)存管理

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-05-05
  • 總結(jié)c++性能優(yōu)化策略

    總結(jié)c++性能優(yōu)化策略

    在本篇文章中小編給大家總結(jié)了關(guān)于C++的性能優(yōu)化策略的相關(guān)知識點,對此有興趣的朋友可以參考學(xué)習(xí)下。
    2018-03-03
  • 獲取C++變量類型的簡單方法

    獲取C++變量類型的簡單方法

    這篇文章主要介紹了獲取C++變量類型的簡單方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

鸡东县| 通辽市| 东平县| 收藏| 都安| 凤凰县| 页游| 宜黄县| 景东| 龙山县| 全南县| 城口县| 天台县| 湖南省| 万年县| 石首市| 沐川县| 郁南县| 奉节县| 铅山县| 锦州市| 密山市| 临海市| 阜新市| 宁国市| 磐石市| 东乡| 绥江县| 上栗县| 凭祥市| 余江县| 同江市| 黎平县| 余姚市| 绵竹市| 绥化市| 富川| 泰宁县| 阳春市| 理塘县| 乌鲁木齐市|