数据结构与算法 - 查找

文章目录

  • 第1关:实现折半查找
  • 第2关:实现散列查找


第1关:实现折半查找

代码如下:

/*************************************************************date: April 2009copyright: Zhu EnDO NOT distribute this code.
**************************************************************/
//折半查找的顺序表 实现文件
//每个结点的数据是关键码
//
#include <stdio.h>
#include <stdlib.h>
#include "BSlist.h"BSeqList* BSL_Create(int size)
//创建一个顺序表
//与BSL_Free()配对
{BSeqList* blist=(BSeqList*)malloc(sizeof(BSeqList));blist->pkey = (int*)malloc(sizeof(int)*size);blist->max=size;blist->len=0;return blist;
}void BSL_Free(BSeqList* blist)
//释放/删除顺序表
//与BSL_Create()配对
{free(blist->pkey);free(blist);
}int BSL_FindKey(BSeqList* blist, int key)
//在排序的顺序表中查找关键码值为key的结点,返回结点的编号
//返回值大于等于0时表示找到值为key的结点的编号,-1表示没有找到
{/*请在BEGIN和END之间实现你的代码*//*****BEGIN*****/int k = 0;int r = blist->len - 1;while (k <= r) {int m = (k + r) / 2;if (key == blist->pkey[m]) {return m;} else if (key < blist->pkey[m]) {r = m - 1;} else {k = m + 1;}}return -1;/******END******//*请不要修改[BEGIN,END]区域外的代码*/
}int BSL_InsKey(BSeqList* blist, int key)
//在排序的顺序表中插入一个值为key的结点
//返回值大于等于0时表示插入的位置, -1表示表满(无法插入)
{if (blist->len>=blist->max) return -1;int k, r, m;k=0; r=blist->len-1;//寻找插入位置while (k<=r) {m=(k+r)>>1; //m=(k+r)/2if (key == blist->pkey[m]) return -2;若不允许插入已存在的值,则需要此行if (key<blist->pkey[m])  r=m-1;else k=m+1;}//插入位置为k, 腾出k号位置for (r=blist->len; r>k; r--) blist->pkey[r]=blist->pkey[r-1];//key放入k号位置blist->pkey[k]=key;blist->len++;return k;
}int BSL_DelKey(BSeqList* blist, int key)
//在排序的顺序表中删除值为key的结点, 
//存在值为x的结点则返回结点编号, 未找到返回-1
{int k=BSL_FindKey(blist, key);if (k<0) return -1;int i=k;while(i < blist->len-1) {blist->pkey[i] = blist->pkey[i+1];i++;}blist->len --;return k;
}void BSL_Print(BSeqList* blist)
//打印整个顺序表
{if (blist->len==0) {printf("The list is empty.\n");return;}printf("The list contains: ");for (int i=0; i<blist->len; i++) {printf("%d  ", blist->pkey[i]);}printf("\n");
}

在这里插入图片描述

第2关:实现散列查找

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "indLnkHash.h"
LHTable* ILH_Create(int n)
//创建散列表, n为表长度,最佳取值:n取小于等于数据个数的最大质数
{HNode* pn=(HNode*)malloc(sizeof(HNode)*n);for (int i=0; i<n; i++) {pn[i].key=0;pn[i].next=NULL;}LHTable* pt=(LHTable*)malloc(sizeof(LHTable));pt-> pn=pn;pt->n=n;return pt;
}
void ILH_Free(LHTable* pt)
//释放散列表
{if (pt==NULL) return;for (int i=0; i<pt->n; i++) {HNode* curr=pt->pn[i].next;while (curr) {HNode* next=curr->next;free(curr);curr=next;}}free(pt->pn);free(pt);
}
bool ILH_InsKey(LHTable* pt, int x)
//插入关键码x
//返回true,表示插入成功
//返回false,表示插入失败(关键码已经存在)
{/*请在BEGIN和END之间实现你的代码*//*****BEGIN*****/int d=x%pt->n;if (pt->pn[d].key==0) {pt->pn[d].key=x;return true;}else if (pt->pn[d].key==x) return false;HNode* prev=&(pt->pn[d]);HNode* curr=pt->pn[d].next;while (curr && curr->key!=x) {prev=curr; curr=curr->next;}if (curr) return  false;HNode* pnode=(HNode*)malloc(sizeof(HNode));pnode->key=x;pnode->next=NULL;//pt->pn[d].next;prev->next=pnode;return true;/******END******//*请不要修改[BEGIN,END]区域外的代码*/
}
bool ILH_FindKey(LHTable* pt, int x)
//查找关键码x
//返回true表示找到
//返回false表示没找到
{int d=x%pt->n;if (pt->pn[d].key==0) {return false;}else if (pt->pn[d].key==x) return true;HNode* curr=pt->pn[d].next;while (curr && curr->key!=x) curr=curr->next;if (curr) return  true;else return false;
}
bool ILH_DelKey(LHTable* pt, int x)
//删除关键码
//返回true表示该关键码存在,且成功删除
//返回false表示该关键码不存在
{/*请在BEGIN和END之间实现你的代码*//*****BEGIN*****/int d=x%pt->n;//关键码x的散列值dif (pt->pn[d].key==0) {return false;}else if (pt->pn[d].key==x)  {if (pt->pn[d].next ==NULL) pt->pn[d].key=0;else {HNode* first=pt->pn[d].next;pt->pn[d].key=first->key;pt->pn[d].next=first->next;free(first);}return true;}HNode* prev=&(pt->pn[d]);HNode* curr=pt->pn[d].next;while (curr && curr->key!=x) {prev=curr; curr=curr->next;}if (curr==NULL) return false;prev->next=curr->next;free(curr);return true;/******END******//*请不要修改[BEGIN,END]区域外的代码*/
}
void ILH_Print(LHTable *pt)
{for (int i=0; i<pt->n; i++) {printf("%5d:", i);if (pt->pn[i].key) {printf("%d", pt->pn[i].key);HNode* curr=pt->pn[i].next;while (curr) {printf("->%d", curr->key);curr=curr->next;}printf("\n");}else printf("-\n");}
}

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310031.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python+django超市进销存仓库管理系统s5264

本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、由管理员和员工&#…

【MATLAB】BiGRU神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 BiGRU神经网络时序预测算法是一种基于双向门控循环单元&#xff08;GRU&#xff09;的多变量时间序列预测方法。该方法结合了双向模型和门控机制&#xff0c;旨在有效地捕捉时间序列数据中…

基于FPGA的数字电路(PWM脉宽调制)

一.PWM的制作原理 假如我们有一个锯齿波&#xff0c;然后在锯齿波上设置一个阈值&#xff08;黑色水平虚线&#xff09;&#xff0c;凡是大于该阈值时输出均为高电平&#xff0c;反之则为低电平&#xff0c;这样我们是不是就得到一个PWM信号呢&#xff1f;如果我们想调整它的占…

【PyQt】(自定义类)QIcon派生,更易用的纯色Icon

嫌Qt自带的icon太丑&#xff0c;自己写了一个&#xff0c;主要用于纯色图标的自由改色。 当然&#xff0c;图标素材得网上找。 Qt原生图标与现代图标对比&#xff1a; 没有对比就没有伤害 Qt图标 网络素材图标 自定义类XJQ_Icon&#xff1a; from PyQt5.QtGui import QIc…

宝塔部署flask添加ssl即https

在宝塔部署flask的步骤我已经写了一篇博客:宝塔部署flask项目-CSDN博客 之前说如果出现找不到application错误: spawned uWSGI http 1 (pid: 3116) --- no python application found, check your startup logs for errors --- [pid: 3114|app: -1|req: -1/1] 127.0.0.1 () {6…

后端程序员React初接触1

后端程序员React初接触 学习react基础与相关库的使用学习 包括react基础 路由 组件库等等 react是用于构建用户界面的JavaScript库 发送请求获取数据处理数据操作dom呈现页面&#xff08;react帮忙操作dom&#xff09; 数据渲染为视图 有facebook打造并开源 解决的问题 dom操…

大创项目推荐 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

WPF+Halcon 培训项目实战(12):WPF导出匹配模板

文章目录 前言相关链接项目专栏运行环境匹配图片WPF导出匹配模板如何了解Halcon和C#代码的对应关系逻辑分析&#xff1a;添加截取ROI功能基类矩形圆形 生成导出模板运行结果&#xff1a;可能的报错你的文件路径不存在你选择的区域的内容有效信息过少 前言 为了更好地去学习WPF…

【华为数据之道学习笔记】8-2 数据质量规则

异常数据是不满足数据标准、不符合业务实质的客观存在的数据&#xff0c;如某位员工的国籍信息错误、某位客户的客户名称信息错误等。 数据在底层数据库多数是以二维表格的形式存储&#xff0c;每个数据格存储一个数据值。若想从众多数据中识别出异常数据&#xff0c;就需要通过…

html文件Js写输入框和弹框调接口jQuery

业务场景&#xff1a;需要使用写一个html文件&#xff0c;实现输入数字&#xff0c;保存调接口。 1、使用 JS原生写法&#xff0c; fetchAPI调接口&#xff0c;使用 alert 方法弹框会阻塞线程&#xff0c;所以写了一个弹框。 <!DOCTYPE html> <html lang"en"…

飞书文档如何转markdown

飞书文档如何转markdown 实现效果实现步骤其他方法 实现效果 导出的结果挂在这了 https://thinkasany.github.io/docs/#/ 实现步骤 以https://upyun.feishu.cn/docx/KERsd1DpioPb1xxye9VcuXbhnBC这篇文章为例 使用工具 https://github.com/Wsine/feishu2md&#xff0c;提供了…

汽车制造厂批量使用成华制造弹簧平衡器

数年来&#xff0c;成华制造都在不断的向各行各界输出着自己的起重设备&#xff0c;与众多企业达成合作&#xff0c;不断供应优质产品。近些年&#xff0c;成华制造以其卓越的产品质量和高效的生产能力&#xff0c;成功实现了弹簧平衡器的大规模批量供应&#xff0c;为重庆数家…