数据结构——第7章 查找

news2025/3/15 7:22:18

1 线性表的查找

数据元素和顺序表的定义

typedef struct{
	KeyType key;
	InfoType otherinfo;
}ElemType;
typedef struct{
	ElemType *R;
	int length;
}SSTable;

1.1 顺序查找

int Search_Seq(SSTable ST,KeyType key){
	ST.R[0].key=key;
	for(int i=ST.length;ST.R[i].key!=key;i--);
	return i; 
} 

ASL分析:

        查找成功:\frac{1}{n}*\frac{n(n+1))}{2}=\frac{n+1}{2}

        查找失败:n+1

ASL=\frac{1}{2}*\frac{n+1}{2}+\frac{1}{2}*(n+1)=\frac{3(n+1)}{4}

1.2 折半查找

int Search_Bin(SSTable ST,KeyType key){
	int low=1,high=ST.length;
	while(low<=high){
		int mid=(low+high)/2;
		if(key==ST.R[mid].key) return mid;
		else if(key>ST.R[mid].key) low=mid+1;
		else high=mid-1;
	}
	return 0;
}

1.3 分块查找

2 树表的查找

        线性表的查找更适用于静态查找表,若要对动态查找进行高效率的查找,可以使用几种特殊的二叉树作为查找表的组织形式,称为树表。

2.1 二叉排序树

数据元素的定义和二叉排序树的二叉链表存储表示

typedef struct{
	KeyType key;
	InfoType otherinfo; 
}ElemType;
typedef struct BSTNode{
	ElemType data;
	struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;

 二叉排序树的递归查找算法

//二叉排序树的递归查找
BSTree SearchBST(BSTree T,KeyType key){
	if(!T||T->data.key==key) return T;
	else if(key<T->data.key) return SearchBST(T->lchild,key);
	else return SearchBST(T->rchild,key);
}

插入

//二叉排序树的插入
void InsertBST(BSTree &T,ElemType e){
	if(T==NULL){
		BSTNode *s=new BSTNode;
		s->data=e;
		s->lchild=s->rchild=NULL;
		T=s;
	}else if(e.key<T->data.key){
		InsertBST(T->lchild,e);
	}else if(e.key>T->data.key){
		InsertBST(T->rchild,e);
	}
} 

创建

//创建排序二叉树
void CreatBST(BSTree &T){
	T=NULL;
	ElemType e;
	cin>>e.key>>e.otherinfo;
	while(e.key!=9999){
		InsertBST(T,e);
		cin>>e.key>>e.otherinfo;
	}
} 

删除

 

2.2 平衡二叉树

3 散列表的查找

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLAlchemy的使用

SQLAlchemy中filter函数的使用 https://blog.csdn.net/m0_67093160/article/details/133318889 创建临时字段 select id , CONCAT(‘内容’) AS fullname from example_table; Pandas数据类型转换_pandas转换数据类型 https://blog.csdn.net/qq_41404557/article/details/125…

用wps自带工具给图片做标注

在wps中&#xff0c;选中wps中的图片&#xff0c;右键选择【编辑】进入图片编辑器&#xff0c;在选项卡面板右侧选择【标注】工具&#xff0c;再选择【添加文本】工具&#xff0c;即可直接在图片上输入文字&#xff0c;标注完成后选择【覆盖原图】就完成标注任务。

【3200字干货】2024跨境电商5大市场:选品风向深度剖析

以下是针对马来西亚、新加坡、泰国、菲律宾和台湾这5个东南亚跨境电商市场的选品市场分析&#xff1a; 一、马来西亚 市场特点&#xff1a;马来西亚是东南亚第三大经济体&#xff0c;拥有年轻的消费群体和对跨境购物的偏好。网购消费力强&#xff0c;易上手爆单&#xff0c;跨…

tableau基础学习——添加标靶图、甘特图、瀑布图

标靶图 添加参考线 添加参考分布 甘特图 创建新的字段 如设置延迟天数****计划交货日期-实际交货日期 为正代表提前交货&#xff0c;负则代表延迟交货 步骤&#xff1a;创建——计算新字段 把延迟天数放在颜色、大小里面就可以 瀑布图 两个表按照地区连接 先做个条形图&…

Python构建学生信息管理系统:网站路由补充和首次运行

在之前的内容中&#xff0c;我们已经完成了学生信息管理系统&#xff08;Student Information Management System, SIMS&#xff09;的需求分析、环境搭建、数据库创建、项目结构的初始化&#xff0c;以及运行。正常做下来的朋友&#xff0c;会发现项目运行后输入http://127.0.…

vscode在json文件中添加注释

1.在设置中输入关联文件&#xff0c;点击添加项&#xff1b; 2.

ClickHouse 24.3 版本发布说明

本文字数&#xff1a;10774&#xff1b;估计阅读时间&#xff1a;27 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 北半球迎来春天&#xff0c;也是 ClickHouse 发布新版本的时候了。 发布概要 本次ClickHouse 24.3版本包含了1…

Android 系统充电动画

效果 Android获取电池充电状态是否为快充可参考. Android_source/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java private int lastBatteryStatus;private final BroadcastReceiver mBatteryChangedReceiver new BroadcastRece…

ComfyUI学习旅程

一、模型文件&#xff08;Checkpoint&#xff09; 首先它很大&#xff0c;这些文件是你从huggingface或者civitai下载而来的&#xff0c; 所以这些大文件如 .ckpt 或 .safetensors &#xff0c;实际上包含了什么内容呢&#xff1f; 它包含了包含了三种不同模型的权重&#x…

【STM32F4】STM32CUMX相关环境配置

一、环境配置 我们需要以下两个软件 &#xff08;一&#xff09;keil5 最正统&#xff0c;最经典的嵌入式MCU开发环境。 该环境的配置可以看看之前的文章 所需文件如下&#xff1a; 当时配置的是STC8H的环境&#xff0c;现在基于此&#xff0c;重新给STM32配置环境。能让STC…

docker的默认路径存储不足

docker的默认路径存储不足 添加磁盘 [rootlocalhost ~]# fdisk -l磁盘 /dev/sda&#xff1a;42.9 GB, 42949672960 字节&#xff0c;83886080 个扇区 Units 扇区 of 1 * 512 512 bytes 扇区大小(逻辑/物理)&#xff1a;512 字节 / 512 字节 I/O 大小(最小/最佳)&#xff1a…

【网络安全】网络安全协议和防火墙

目录 1、网络层的安全协议&#xff1a;IPsec 协议族 &#xff08;1&#xff09;IP 安全数据报格式 &#xff08;2&#xff09;互联网密钥交换 IKE (Internet Key Exchange) 协议 2、运输层的安全协议&#xff1a;TLS 协议 3、系统安全&#xff1a;防火墙与入侵检测 1、网络…

CJSON工具类

4.4.3.CJSON工具类 OpenResty提供了一个cjson的模块用来处理JSON的序列化和反序列化。 官方地址&#xff1a; https://github.com/openresty/lua-cjson/ 1&#xff09;引入cjson模块&#xff1a; local cjson require "cjson"2&#xff09;序列化&#xff1a; …

pwn--realloc [CISCN 2019东南]PWN5

首先学习一下realloc这个函数&#xff0c;以下是文心一言的解释&#xff1a; realloc是C语言库函数之一&#xff0c;用于重新分配内存空间。它的主要功能是调整一块内存空间的大小。当需要增加内存空间时&#xff0c;realloc会分配一个新的更大的内存块&#xff0c;然后将原内…

19 使用MapReduce编程统计超市1月商品被购买的次数

首先将1月份的订单数据上传到HDFS上&#xff0c;订单数据格式 ID Goods两个数据字段构成 将订单数据保存在order.txt中&#xff0c;&#xff08;上传前记得启动集群&#xff09;。 打开Idea创建项目 修改pom.xml&#xff0c;添加依赖 <dependencies><dependency>…

多客圈子交友系统 uniapp+thinkphp6适配小程序/H5/app/api全开源,多款插件自选,支持个性定制!

网上交友的优点包括&#xff1a; 1. 方便&#xff1a;网上交友可以随时随地进行&#xff0c;不受时间和空间的限制&#xff0c;方便且高效。 2. 匿名性&#xff1a;网上交友可以实现匿名性&#xff0c;用户可以匿名地搜索、聊天或交换信息&#xff0c;保护个人隐私和安全。 3.…

Linux——进程基本概念中篇

Linux——进程基本概念中篇 文章目录 Linux——进程基本概念中篇一、通过系统调用创建进程——fork1.1 fork的理解1.2 fork的返回值 二、进程状态2.1 运行状态2.2 睡眠状态和休眠状态2.3 停止状态和死亡状态2.4 僵尸进程2.5 孤儿进程2.6 前台和后台进程 三、进程优先级3.1 查看…

redis中的集群模式

主从复制、主从同步(解决高并发读的问题) 主从同步原理&#xff1a; 1.全量同步 slave&#xff08;从节点&#xff09;每次请求数据同步会带两个参数&#xff1a;replid和offset。 replid&#xff1a;第一次请求同步时&#xff0c;replid和master的replid不一样&#xff0c;这…

使用FPGA实现逐级进位加法器

介绍 逐级进位加法器就是将上一位的输出作为下一位的进位输入&#xff0c;依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构&#xff0c;应该很容易理解吧。 下面我也列举了一位加法器&#xff0c;可以看下。 电路结构 设计文件 1位加法器 librar…

Python-VBA函数之旅-iter函数

目录 一、iter函数的常见应用场景&#xff1a; 二、iter函数使用注意事项&#xff1a; 三、如何用好iter函数&#xff1f; 1、iter函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 …