数据结构【查找篇】

数据结构【查找篇】


文章目录

  • 数据结构【查找篇】
  • 前言
    • 为什么突然想学算法了?
    • 为什么选择码蹄集作为刷题软件?
  • 目录
    • 一、顺序查找
    • 二、折半查找
    • 三、 二叉排序树的查找
    • 四、红黑树
  • 结语


前言

在这里插入图片描述

为什么突然想学算法了?

> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下竞争压力逐渐增大,无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个寒假巩固速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~

在这里插入图片描述


为什么选择码蹄集作为刷题软件?

码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。
.
在这里插入图片描述


目录

一、顺序查找

#include<iostream>using namespace std;
#define Maxsize 100typedef struct{         //查找表的数据结构(顺序表)int *elem;          //动态数组基址int Tablelen;       //表的长度int MaxSize;        //表的最大长度
}SSTable;//顺序查找
int Search_Seq(SSTable ST,int key){int i;for(i=0;i<ST.Tablelen && ST.elem[i]!=key;++i);//查找功能,则返回元素下标;查找失败,则返回-1return i==ST.Tablelen? -1:i;
}//顺序查找(哨兵)
int Search_SeqShaoBing(SSTable ST,int key){ST.elem[0]=key;                     //哨兵int i;for(i=ST.Tablelen;ST.elem[i]!=key;--i);//从后往前找return i;       //查找成功,则返回元素下标;查找失败,则返回0
}//初始化顺序表
//基本操作——初始化一个程序表(动态分配)
void InitSSTable(SSTable &ST){//用malloc函数申请一片连续的存储空间ST.elem =(int*)malloc(Maxsize * sizeof(int));ST.Tablelen=0;ST.MaxSize=Maxsize;
}//增加动态数组的长度
void IncreaseSize(SSTable &ST,int len){int *p=ST.elem;ST.elem=new int(Maxsize+len);for(int i=0;i<ST.Tablelen;i++){ST.elem[i]=p[i];      //将数据复制到新区域}ST.MaxSize=ST.MaxSize+len; //顺序表最大长度增加lendelete p;
}//在顺序表位置i处插入元素e
bool InsertSSTable(SSTable &ST,int i,int e){if(i<1 || i>ST.Tablelen+1) return false;if(ST.Tablelen >= ST.MaxSize) return false;for(int j=ST.Tablelen;j>i;j--){ST.elem[j]=ST.elem[j-1];}ST.elem[i-1]=e;ST.Tablelen++;return true;
}//销毁顺序表
void DeleteSSTable(SSTable &ST){free(ST.elem);ST.elem = NULL;ST.Tablelen = ST.MaxSize = 0;
}//输出顺序表
void PrintfSSTable(SSTable ST){for(int i=0;i<ST.Tablelen;i++)cout<<ST.elem[i]<<" ";cout<<endl;
}int main(){SSTable ST;InitSSTable(ST);for(int i=1;i<=10;i++){InsertSSTable(ST,i,i);}PrintfSSTable(ST);int i=Search_Seq(ST,5);cout<<i<<endl;//销毁动态顺序表DeleteSSTable(ST);cout<<endl;return 0;
}

二、折半查找


#include<iostream>using namespace std;
#define Maxsize 100typedef struct{         //查找表的数据结构(顺序表)int *elem;          //动态数组基址int Tablelen;       //表的长度int MaxSize;        //表的最大长度
}SSTable;//折半查找
int Binary_Search(SSTable ST,int key){int low=0,high=ST.Tablelen-1,mid;while(low<=high){mid=(low+high)/2;              //向下取整,取中间位置if(ST.elem[mid]==key)return mid;              //查找成功则返回所在位置else if(ST.elem[mid]>key)high = mid-1;            //从前半部分继续查找elselow = mid+1;             //从后半部分继续查找}return -1;                       //查找失败,返回-1
}//初始化顺序表
//基本操作——初始化一个程序表(动态分配)
void InitSSTable(SSTable &ST){//用malloc函数申请一片连续的存储空间ST.elem =(int*)malloc(Maxsize * sizeof(int));ST.Tablelen=0;ST.MaxSize=Maxsize;
}//增加动态数组的长度
void IncreaseSize(SSTable &ST,int len){int *p=ST.elem;ST.elem=new int(Maxsize+len);for(int i=0;i<ST.Tablelen;i++){ST.elem[i]=p[i];      //将数据复制到新区域}ST.MaxSize=ST.MaxSize+len; //顺序表最大长度增加lendelete p;
}//在顺序表位置i处插入元素e
bool InsertSSTable(SSTable &ST,int i,int e){if(i<1 || i>ST.Tablelen+1) return false;if(ST.Tablelen >= ST.MaxSize) return false;for(int j=ST.Tablelen;j>i;j--){ST.elem[j]=ST.elem[j-1];}ST.elem[i-1]=e;ST.Tablelen++;return true;
}//销毁顺序表
void DeleteSSTable(SSTable &ST){free(ST.elem);ST.elem = NULL;ST.Tablelen = ST.MaxSize = 0;
}//输出顺序表
void PrintfSSTable(SSTable ST){for(int i=0;i<ST.Tablelen;i++)cout<<ST.elem[i]<<" ";cout<<endl;
}int main(){SSTable ST;InitSSTable(ST);for(int i=1;i<=10;i++){InsertSSTable(ST,i,i);}PrintfSSTable(ST);int i=Binary_Search(ST,5);cout<<i<<endl;//销毁动态顺序表DeleteSSTable(ST);cout<<endl;return 0;
}

三、 二叉排序树的查找

//在二叉排序树中查找值为key的结点
BSTNode *BST_Search(BSTree T,int key){while(T!=NULL && key!=T->key){          //若树空或等于根结点值,则结束循环if(key<T->key) T=T->lchild;         //小于,则在左子树上查找else T=T->rchild;                   //大于,则在右子树上查找}return T;
} //最坏空间复杂度O(1)//在二叉排序树中查找值为Key的结点(递归实现)
BSTNode *BSTSearch(BSTree T, int key){if(T==NULL)return NULL;                        //查找失效if(key==T->key)return T;                           //查找成功else if(key < T->key)return BSTSearch(T->lchild,key);    //在左子树中找else return BSTSearch(T->rchild,key);    //在右子树中找
} //最坏空间复杂度O(h)//在二叉排序树插入关键字为k的新结点(递归实现)
int BST_Insert(BSTree &T,int k){if(T==NULL){T = (BSTree)malloc(sizeof(BSTNode));T->key=k;T->lchild=T->rchild=NULL;return 1;                           //返回1,插入成功}else if(k==T->key)                      //树中存在相同关键字的结点,插入失败return 0;else if(k<T->key)                       //插入到T的左子树return BST_Insert(T->lchild,k);else                                    //插入到T的右子树return BST_Insert(T->rchild,k);
}//按照str[]中的关键字序列建立二叉排序树
void Creat_BST(BSTree &T,int str[],int n){T=NULL;                                 //初始时T为空树int i=0;while(i<n){                             //依次将每个关键字插入到二叉排序树中BST_Insert(T,str[i]);i++;}
}

四、红黑树

struct RBNode{          //红黑树的定义int key;            //关键字的值RBNode* parent;     //父节点指针RBNode* lChild;     //左孩子指针RBNode* rChild;     //右孩子指针int color;          //结点颜色,如:可用0/1表示黑/红,也可以使用枚举型enum表示颜色
};

结语

感谢大家一直以来的不断支持与鼓励,码题集题库中的进阶塔350题正在逐步更新,之后会逐步跟进星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?

另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~

愿你的结局,配得上你一路的颠沛流离。
在这里插入图片描述

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

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

相关文章

普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)

简介 主芯片STM32F103ZET6&#xff0c;读取内部温度其他知识 内部温度所在ADC通道 温度计算公式 V25跟Avg_Slope值 参考文档 stm32f103ze.pdf 电压计算公式 Vout Vref * (D / 2^n) 其中Vref代表参考电压&#xff0c; n为ADC的位数&#xff0c; D为ADC输入的数字信号。 实现…

人工智能在银行运营中的运用

机器学习在金融领域的运用&#xff1a;银行如何以最优的方式抓住 AI 机会&#xff1f; 大型企业若想获得超越竞争对手的优势&#xff0c;那么采用 AI 作为其业务战略是他们的重要任务&#xff0c;而在这方面&#xff0c;大型银行走在了前面。银行开始将 AI 和机器学习应用于前…

了解并使用django-rest-framework-jwt

一 JWT认证 在用户注册或登录后&#xff0c;我们想记录用户的登录状态&#xff0c;或者为用户创建身份认证的凭证。我们不再使用Session认证机制&#xff0c;而使用Json Web Token&#xff08;本质就是token&#xff09;认证机制。 Json web token (JWT), 是为了在网络应用环…

专题一_双指针(一)

文章目录 283.移动零题目解析讲解算法原理扩展编写代码 1089.复习零题目解析讲解算法原理编写代码 202.快乐数题目解析讲解算法原理证明编写代码 11.盛最多水的容器题目解析讲解算法原理暴力解法优秀的解法时间复杂度分析 编写代码 283.移动零 题目链接 题目解析 题目还是比较…

ThinkPHP6.0任意文件上传 PHPSESSION 已亲自复现

ThinkPHP6.0任意文件上传 PHPSESSION 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建安装thinkphp6漏洞信息配置 漏洞利用 修复建议 漏洞名称 漏洞描述 2020年1月10日&#xff0c;ThinkPHP团队发布一个补丁更新&#xff0c;修复了一处由不安全的SessionId导致的任意文…

【GlobalMapper精品教程】069:中文属性表乱码问题及解决方法

参考阅读:【ArcGIS Pro微课1000例】0012:ArcGIS Pro属性表中文乱码完美解决办法汇总 文章目录 一、Globalmapper默认字符集设置二、shp属性表乱码三、转出的kmz乱码一、Globalmapper默认字符集设置 中文字体乱码通常是由字符编码不匹配造成的。 打开Globalmapper软件,点击工…

【动态规划】【字符串】扰乱字符串

作者推荐 视频算法专题 涉及知识点 动态规划 字符串 LeetCode87扰乱字符串 使用下面描述的算法可以扰乱字符串 s 得到字符串 t &#xff1a; 如果字符串的长度为 1 &#xff0c;算法停止 如果字符串的长度 > 1 &#xff0c;执行下述步骤&#xff1a; 在一个随机下标处将…

java struts2教务管理系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java struts2 教务管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助 struts2 框架开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库…

【ikbp】数据可视化DataV

天天查询一些数据&#xff0c;希望来一个托拉拽的展示&#xff0c;部署体验一下可视化大屏 快速搭建快速查询实时更新简单易用 启动服务 数据可视化 静态查询 配置数据 过滤数据 分享

系列七、Ribbon

一、Ribbon 1.1、概述 Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具&#xff0c;是Netflix发布的一款开源项目&#xff0c;其主要功能是提供客户端的软件负载均衡算法和服务调用&#xff0c;Ribbon客户端组件提供一系列完善的配置项&#xff0c;例如&#xff1a…

《低功耗方法学》翻译——卷首语

就目前半导体的发展现状来说&#xff0c;我们国家还处在奋力追赶阶段。在我国半导体行业历经多轮技术制裁的今天&#xff0c;我们不得不承认的是&#xff0c;半导体技术最先进的就是美国。我国早在上世纪六七十年代就有涉足半导体技术&#xff0c;大量华裔留美的爱国人士回国为…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于碳捕集与封存-电转气-电解熔融盐协同的虚拟电厂优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到多个关键概念&#xff0c;让我们逐一解读&#xff1a; 碳捕集与封存&#xff08;Carbon Capture and Storage&#xff0c;CCS&#xff09;&a…

redis 三主六从高可用dockerswarm高级版(不固定ip)

redis集群(cluster)笔记 redis 三主三从高可用集群docker swarm redis 三主六从高可用docker(不固定ip) redis 三主六从高可用dockerswarm高级版(不固定ip) 此博客解决&#xff0c;redis加入集群后&#xff0c;是用于停掉后重启&#xff0c;将nodes.conf中的旧的Ip替换为新的…

SQL 在已有表中修改列名的方法

文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question&#xff1a; 假设有一张表 StudentInfo&#xff0c;表中有一个列名是 Student_Name &#xff0c;想要把这个列名改成 StudentName 应该如何操作&#xff1f; 建表语句如下&#xff1a; --建表 if object_id(S…

【Nginx】反向代理和负载均衡

反向代理 nginx 反向代理&#xff0c;就是将前端发送的动态请求由 nginx 转发到后端服务器。 server {listen 80;server_name localhost;# 反向代理,处理管理端发送的请求location /api/ {proxy_pass http://localhost:8080/admin/;#proxy_pass http://webservers/…

2023我的编程之旅-地质人的山和水

引言 大家好&#xff0c;我是搞地质的。外行人有的说我们游山玩水&#xff0c;有的说我们灰头土脸&#xff0c;也有的说我们不是科学。 而我说&#xff0c;这是一门穷极一生青春&#xff0c;值得奉献的行业。这是一门贴近民生&#xff0c;又拥抱自然的学科。他的真理性在于探…

【数据结构】一些数组面试题以及顺序表的思考

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 数组相关面试题2. 顺序表的问题及思考 1. 数组相关面试题 1.原地移除数组中所有的元素val&#xff0c;要求时间复杂度为O(N)&#xff0c;空间复杂度为O(1)。 int removeElement(int* nums, int numsSize, int val) {i…

网络安全—部署CA证书服务器

文章目录 网络拓扑安装步骤安装证书系统安装从属证书服务器 申请与颁发申请证书CA颁发证书 使用windows Server 2003环境 网络拓扑 两台服务器在同一网段即可&#xff0c;即能够互相ping通。 安装步骤 安装证书系统 首先我们对计算机名进行确认&#xff0c;安装了证书系统后我…

59.网游逆向分析与插件开发-游戏增加自动化助手接口-文字资源读取类的C++还原

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;游戏菜单文字资源读取的逆向分析-CSDN博客 之前的内容&#xff1a;接管游戏的自动药水设定功能-CSDN博客 码云地址&#xff08;master分支&#xff09;&#xff1a;https://gitee.com/dye_your_fing…

c++语言基础18-开房门

题目描述 假设你手里有一串钥匙&#xff0c;这串钥匙上每把钥匙都有一个编号&#xff0c;对应着一个房门的编号。现给你一个房门编号&#xff0c;你需要判断是否能够打开该房门。 输入描述 测试数据共有多组。 第一行为一个整数 s&#xff0c;表示共有多少组测试数据。 每组第一…