当前位置: 首页 > news >正文

数据结构实验(C语言):折半查找、哈希查找

文章参考过网上的内容,如有侵权,请联系

#include<stdio.h>#include<stdlib.h>#defineHASHSIZE 12#defineNULLKEY -32768typedefstruct{int*elem;//数据元素储存空间基址,建表示按实际长度分配,0号单元留空intlength;//表长度}SSTable,HashTable;/*typedef struct { int *elem; //数据元素存储基址,动态分配数组 int count1; //当前数据元素个数 }HashTable;*/intm=HASHSIZE;intSearch_Seq(SSTable ST,intkey){//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到//则函数值该元素在表中的位置,否则为0ST.elem[0]=key;//哨兵inti;for(i=ST.length;ST.elem[i]!=key;--i);//从后往前找returni;//找不到时,i为0}intSearch_Bin(SSTable ST,intkey){//在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为//该元素在表中的位置,否则为0intlow=1;inthigh=ST.length;//置区间初值while(low<=high){intmid=(low+high)/2;if(ST.elem[mid]==key)returnmid;//找到待查找元素elseif(ST.elem[mid]>key)high=mid-1;//继续在前半区间进行查找elselow=mid+1;//继续在后半区间进行查找}return0;//顺序表中不存在待查找元素}//初始化散列表intInitHashTable(HashTable*H){inti;H->length=m;H->elem=(int*)malloc(m*sizeof(int));for(i=0;i<m;i++)H->elem[i]=NULLKEY;return1;}voidInitSSTable(SSTable&ST){ST.length=m;ST.elem=(int*)malloc((m+1)*sizeof(int));}//散列函数intHash(intkey){returnkey%m;}//插入关键字进入散列表voidInsertHash(HashTable*H,intkey){intaddr=Hash(key);while(H->elem[addr]!=NULLKEY)addr=(addr+1)%m;H->elem[addr]=key;}//散列表查找关键字intSearchHash(HashTable H,intkey,int*addr){*addr=Hash(key);while(H.elem[*addr]!=key){*addr=(*addr+1)%m;if(H.elem[*addr]==NULLKEY||*addr==Hash(key)){return-1;}}return*addr;}intmain(){SSTable St;InitSSTable(St);inta[12]={12,16,22,25,34,42,48,57,68,71,72,85};HashTable H;inti;InitHashTable(&H);printf("被查找数组\n");for(i=0;i<m;i++){InsertHash(&H,a[i]);St.elem[i+1]=a[i];printf("%d ",a[i]);}St.length=m;printf("\n");printf("---菜单---\n");printf("1:顺序查找;2:折半查找;3:哈希查找\n");intn;while(1){printf("选择查找方式\n");scanf("%d",&n);switch(n){case3:{printf("插入之后的哈希表为:\n");for(i=0;i<m;i++)printf("%d,",H.elem[i]);intaddr,j;j=SearchHash(H,a[5],&addr);printf("搜索到a[5]的地址是:%d\n",j);break;}case1:{printf("查找22\n");printf("元素位置:%d\n",Search_Seq(St,22));break;}case2:{printf("查找16\n");printf("元素位置:%d\n",Search_Bin(St,16));break;}}}}
http://www.jsqmd.com/news/1281764/

相关文章:

  • Agentic AI实战:从概念到生产级智能体的架构设计与工程实践
  • 技术技能快速掌握:从基础到精通的系统方法论
  • 什么是完全二叉树?什么是叶子结点?一道题搞懂
  • ComfyUI-SUPIR终极指南:基于SDXL的智能图像超分辨率完整教程
  • 10-Gateway API
  • Leaf size is too small for the input dataset 解决办法
  • linux shell 各种括号作用详解()、(())、[]、[[]]、{}
  • 惠州惠城漏水检测维修一站式服务 - 本地正规防水补漏公司精选推荐(2026 最新)全域上门:卫生间 / 厨房 / 阳台 / 屋顶渗漏水免砸砖检测维修补漏全攻略 - 吉林同城获客
  • SpringBoot+Vue构建问卷调查系统的技术实践
  • 如何快速搭建私有搜索引擎:SearXNG Docker终极部署指南
  • NBM7100A芯片在低功耗物联网设备中的应用与优化
  • 暗黑2存档编辑器完全手册:零基础掌握角色与装备修改
  • Java微服务的七个常见架构错误:从超时配置到异常处理的生产级反例
  • SpringBoot拦截器读取流后不能再读取(详解)
  • 【第一章04】MQTT控制报文
  • Unity-XLua中Lua异常处理:构建跨语言稳定性的工程实践
  • Windows 11 添加网络打印机总是连接失败:从设备发现到 TCP/IP 端口的排查记录
  • 01 准备你的开发环境
  • 编写程序对比一帆风顺和历经波折两种状态下的作品风格,利用低谷心境打造差异化创意。
  • 量化交易策略可视化与实战复盘
  • Vosk-Browser:浏览器端离线语音识别的革命性解决方案
  • 思源宋体TTF:7种粗细的免费开源中文字体终极指南
  • 数字沟通的时光守护者:RevokeMsgPatcher如何为你的对话留下永恒印记
  • 现代网络诊断工具Trippy:从架构设计到实战应用的完整指南
  • 职场压力监测:汗液生物指标与可穿戴设备的技术解析
  • 使用Spring实现权限控制动态为注解赋值
  • Git 快速极简图文教程 第一篇
  • 物联网设备硬件级安全方案:PIC18与SE050集成实践
  • 企业私域流量团队搭建与高效运营指南
  • HFS文件服务器:轻松搭建个人云存储与文件共享平台