91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何利用哈希表實現通訊錄

發布時間:2022-10-19 15:38:09 來源:億速云 閱讀:164 作者:iii 欄目:編程語言

本篇內容主要講解“C語言如何利用哈希表實現通訊錄”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言如何利用哈希表實現通訊錄”吧!

1.需求分析

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

2.概要設計

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

3.詳細設計

#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;  //字符轉化為數字 
  } 
  k=(k%19);    //除余法求散列地址 
  return k; 
}//c除留余數法處理電話號碼 
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數組值作為參數傳遞給哈希函數得到k1 
   p1->next=num_list[k1];//將k1得到的值作為數組的儲存地址賦值給頭結點的下一個節點 
   num_list[k1]=p1;//再將p1的數據傳遞給數組,故p1可以釋放作為下一個節點產生 
   printf("結束請按1,再次輸入請按0\n"); 
   scanf("%d",&m); 
  } 
  printf("通訊表已經創建\n"); 
} 
  void dlter() 
{ 
   char num[11]; 
  int k1; 
  int find=0; 
  struct node *f; 
    printf("請查詢要修改的聯系人的電話:\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("沒有找到要刪除的節點!"); 
 
 
  } 
void list() 
{ 
  struct node *f;//打印節點指針 
  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("請輸入查詢人的電話號碼:"); 
    scanf("%s",num); 
    k1=hash(num); 
    f=num_list[k1]; 
    while(f!=NULL) 
    { 
      if(strcmp(f->num,num)==0) 
      { 
        printf("所要查找的聯系人信息 :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("此聯系人沒有找到!"); 
 
 
  } 
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.結束       |★\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"); 
    } 
  } 
}

到此,相信大家對“C語言如何利用哈希表實現通訊錄”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

紫金县| 盱眙县| 河东区| 嘉祥县| 临安市| 龙川县| 常宁市| 芒康县| 浦县| 宝清县| 龙口市| 乌鲁木齐市| 深泽县| 临武县| 宁海县| 宝清县| 闸北区| 绵竹市| 贵州省| 陆良县| 呼图壁县| 维西| 肥西县| 龙江县| 视频| 正镶白旗| 彰武县| 博野县| 会理县| 枝江市| 涿鹿县| 察雅县| 利辛县| 康保县| 兴仁县| 德兴市| 呼和浩特市| 肃北| 乃东县| 齐齐哈尔市| 汾西县|