查找技术:有序表的对分查找(折半查找)类
一 查找技术相关总结:
1.顺序查找:(1)如果线性表为无序表(即表中元素的排序是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找;(2)即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。
2.有序表的对分查找:条件:顺序存储的有序表。
3.分块查找(又称索引顺序查找):分块有序表结构分为两部分(1)线性表本身采用顺序存储结构(2)在建立一个索引表,在索引表中,对线性表的每个子表建立一个索引结点,每个结点包括两个域:一个数据域,用于存放对应子表中的最大元素值;二是指针域,用于指示对应子表的第一个元素在整个线性表中的序号。显然,索引表关于数据域是有序的。
4.二叉排序树查找
5.多层索引树查找(B-和B+树)
二 对分查找类:
1.对分查找类SL_Link.h
#include<iostream.h>
template <class T>
class SL_List
{
private:
int mm;//存储空间容量
int nn;//表长度
T *v;
public:
SL_List(){mm=0;nn=0;return;}//只定义对象
SL_List(int);//顺序有序表初始化(指定存储空间容量)
int search_SL_List(T);//顺序有序表查找
int insert_SL_List(T);//顺序有序表插入
int delete_SL_List(T);//顺序有序表删除
void prt_SL_List();//顺序输出有序表中元素与有序表长度
friend SL_List operator +(SL_List &,SL_List &);//有序表合并
};
//顺序有序表初始化(指定存储空间容量)
template <class T>
SL_List<T>::SL_List(int m)
{
mm=m;
v=new T[mm];
nn=0;
return;
}
//顺序有序表查找
template <class T>
int SL_List<T>::search_SL_List(T x)
{
int i,j,k;
i=1;j=nn;
while(i<=j)
{
k=(i+j)/2;
if(v[k-1]==x)
return(k-1);
if(v[k-1]>x)
j=k-1;
else i=k+1;
}
return -1;
}
//顺序有序表插入
template <class T>
int SL_List<T>::insert_SL_List(T x)
{
int k;
if(nn==mm)
{
cout<<"上溢!"<<endl;return -1;
}
k=nn-1;
while(v[k]>x)
{
v[k+1]=v[k];
k=k-1;
}
v[k+1]=x;
nn=nn+1;
return 1;
}
//顺序有序表删除
template <class T>
int SL_List<T>::delete_SL_List(T x)
{
int i,k;
k=search_SL_List(x);
if(k>=0)
{
for(i=k;i<nn-1;i++)
v[i]=v[i+1];
nn=nn-1;
}
else
cout<<"没有这个元素!"<<endl;
return k;
}
//顺序输出有序表中元素与有序表长度
template <class T>
void SL_List<T>::prt_SL_List()
{
int i;
cout<<"nn="<<nn<<endl;
for(i=0;i<nn;i++)
cout<<v[i]<<endl;
return;
}
//有序表合并
template <class T>
SL_List<T> operator +(SL_List<T> &s1,SL_List<T> &s2)
{
int k=0,i=0,j=0;
SL_List<T> s;
s.v=new T[s1.nn+s2.nn];
while((i<s1.nn)&&(j<s2.nn))
{
if(s1.v[i]<=s2.v[j])
{
s.v[k]=s1.v[i];i=i+1;
}
else
{
s.v[k]=s2.v[j];j=j+1;
}
k=k+1;
}
if(i==s1.nn)
{
for(i=j;i<s2.nn;i++)
{
s.v[k]=s2.v[i];k=k+1;
}
}
else
for(j=i;j<s1.nn;j++)
{ s.v[k]=s1.v[j];k=k+1;
}
s.nn=s1.nn+s2.nn;
s.mm=s1.mm+s2.mm;
return (s);
}
2.具体事例
#include "SL_List.h"
int main()
{
int k;
double a[5]={1.5,5.5,2.5,4.5,3.5};
double b[7]={1.0,7.5,2.5,4.0,5.0,4.5,6.5};
SL_List<double> s1(20);//建立容量为20 长度为5的有序表对象s1
SL_List<double> s2(30);//建立容量为30 长度为7的有序表对象s2
for(k=0;k<5;k++)//依次插入有序表的元素
s1.insert_SL_List(a[k]);
for(k=0;k<7;k++)
s2.insert_SL_List(b[k]);
cout<<"输出有序表对象s1:"<<endl;
s1.prt_SL_List();
cout<<"输出有序表对象s2:"<<endl;
s2.prt_SL_List();
SL_List<double> s3;
s3=s1+s2; //有序表合并
cout<<"输出合并后的有序表对象s3:"<<endl;
s3.prt_SL_List();
s3.delete_SL_List(a[0]);
s3.delete_SL_List(b[0]);
s3.delete_SL_List(100.0);
cout<<"输出删除后的有序表s3:"<<endl;
s3.prt_SL_List();
return 0;
}
3.实验结果
查找技术:有序表的对分查找(折半查找)类相关推荐
- 有序表的索引顺序结构查找次数分析
有序表的索引顺序结构查找次数分析 @(算法学习) 为了提高查找效率,对65025个元素的有序顺序表建立索引顺序结构,在最好情况下查找到表中已有元素,平均需要执行(B)次关键字比较. A. 10 B. ...
- 二分查找法--有序表
思路:1.定义一个方法,再在main()方法里传入数组和自己想要查找的数. 2.二分法适用于有序表,首先将给的target与中间位置比较,相等则查找成功,不相等则在前半段或后半段.大于中间位置数在后半 ...
- c语言实验报告 折半查找法,C语言数组之冒泡排序+折半查找法(二分查找)
冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...
- c语言折半查找输出坐标,用c语言编写折半查找法
折半查找法又称为二分查找,是在一个有序数组里面找到一个具体的数,方法我在代码里注释到了. #include int binary_search(int *arr, int key, int sz)// ...
- 对字符串进行折半查找c语言,C语言:编写折半查找函数
思路: 先把中间元素找到,寻找的元素在中间元素左边,则小于中间元素,改变right.再继续折半找中间元素寻找. #include #include #include int Binary(int x, ...
- 数据结构折半查找例题_数据结构第9章例题与答案
第九章 集合 一. 选择题 1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度asl为( ).[北京航空航天大学 2000 一.8 (2分 ...
- 查找——索引顺序表和倒排表
查找 8.3 索引顺序表和倒排表 8.3.1 索引顺序表 (1)完全索引 (2)二级索引 结论 8.3.2 倒排表 (1)链式倒排索引表 (2)单元倒排索引表 特点 8.3 索引顺序表和倒排表 当数据 ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 单链表折半查找c语言,为什么有序的单链表不能进行折半查找
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:为什么有序的单链表不能进行折半查找 问题详情:急!!!!拜托高手解答 等级低 分数不高 请帮帮忙 谢谢了回答:这是由链表的特决定的. ...
最新文章
- 02Django入门仪式之Hello World
- em oracle 安装,oracle-EM安装
- java客户端_Java常用的Http client客户端
- 比特币一种点对点的电子现金系统是哪一年诞生的_阎王解读比特币白皮书:点对点电子现金系统...
- 渗透实例:The Game Of Bob_1.0.1
- 梅森旋转产生随机数c语言实现,梅森旋转法产生随机数
- interface_cast做什么的?
- Tomcat详解(十)——Tomcat性能调优
- 继续惨...555555555
- input 输入框中文,监听的input事件 屏蔽拼音状态
- 基于HTML5 Canvas实现炫酷钟表效果
- 【GPS】GPS测试环境
- [多目标优化算法]1.NSGA-II——非支配排序遗传算法
- Strusts2简单入门教程
- 提问:QQ音乐客户端如何通过访问网址获取内容
- 1134: 小青蛙,跳跳跳
- ERP系统与钉钉对接
- python 通信系统仿真_深入浅出通信原理连载22-40(Python代码版)
- 反向保理供应链金融ABS业务中避免过桥资金的三种方式浅析
- 央视辟谣WiFi辐射危害:孕妇穿辐射装多此一举
热门文章
- 通过挑土豆—我学会了如何区分JS数组的遍历方法
- Three.js 实现虎年春节3D创意页面
- Mac和Win7双系统 + 完美文件共享
- helm3.7.2及helm-push_0.10.1安装及使用
- HTML/CSS学习笔记(1)
- OSPF在NBMA网络中的五种模式
- Qt中用户界面的User Interface Compiler(uic)机制的相关说明
- layui 使用文档总结
- 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题
- 最强国产开源电子表格-Luckysheet,强势登顶Github trending第一名!