一 查找技术相关总结:

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.实验结果

查找技术:有序表的对分查找(折半查找)类相关推荐

  1. 有序表的索引顺序结构查找次数分析

    有序表的索引顺序结构查找次数分析 @(算法学习) 为了提高查找效率,对65025个元素的有序顺序表建立索引顺序结构,在最好情况下查找到表中已有元素,平均需要执行(B)次关键字比较. A. 10 B. ...

  2. 二分查找法--有序表

    思路:1.定义一个方法,再在main()方法里传入数组和自己想要查找的数. 2.二分法适用于有序表,首先将给的target与中间位置比较,相等则查找成功,不相等则在前半段或后半段.大于中间位置数在后半 ...

  3. c语言实验报告 折半查找法,C语言数组之冒泡排序+折半查找法(二分查找)

    冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...

  4. c语言折半查找输出坐标,用c语言编写折半查找法

    折半查找法又称为二分查找,是在一个有序数组里面找到一个具体的数,方法我在代码里注释到了. #include int binary_search(int *arr, int key, int sz)// ...

  5. 对字符串进行折半查找c语言,C语言:编写折半查找函数

    思路: 先把中间元素找到,寻找的元素在中间元素左边,则小于中间元素,改变right.再继续折半找中间元素寻找. #include #include #include int Binary(int x, ...

  6. 数据结构折半查找例题_数据结构第9章例题与答案

    第九章  集合 一. 选择题 1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度asl为(    ).[北京航空航天大学 2000 一.8 (2分 ...

  7. 查找——索引顺序表和倒排表

    查找 8.3 索引顺序表和倒排表 8.3.1 索引顺序表 (1)完全索引 (2)二级索引 结论 8.3.2 倒排表 (1)链式倒排索引表 (2)单元倒排索引表 特点 8.3 索引顺序表和倒排表 当数据 ...

  8. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  9. 单链表折半查找c语言,为什么有序的单链表不能进行折半查找

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:为什么有序的单链表不能进行折半查找 问题详情:急!!!!拜托高手解答 等级低 分数不高 请帮帮忙 谢谢了回答:这是由链表的特决定的. ...

最新文章

  1. 02Django入门仪式之Hello World
  2. em oracle 安装,oracle-EM安装
  3. java客户端_Java常用的Http client客户端
  4. 比特币一种点对点的电子现金系统是哪一年诞生的_阎王解读比特币白皮书:点对点电子现金系统...
  5. 渗透实例:The Game Of Bob_1.0.1
  6. 梅森旋转产生随机数c语言实现,梅森旋转法产生随机数
  7. interface_cast做什么的?
  8. Tomcat详解(十)——Tomcat性能调优
  9. 继续惨...555555555
  10. input 输入框中文,监听的input事件 屏蔽拼音状态
  11. 基于HTML5 Canvas实现炫酷钟表效果
  12. 【GPS】GPS测试环境
  13. [多目标优化算法]1.NSGA-II——非支配排序遗传算法
  14. Strusts2简单入门教程
  15. 提问:QQ音乐客户端如何通过访问网址获取内容
  16. 1134: 小青蛙,跳跳跳
  17. ERP系统与钉钉对接
  18. python 通信系统仿真_深入浅出通信原理连载22-40(Python代码版)
  19. 反向保理供应链金融ABS业务中避免过桥资金的三种方式浅析
  20. 央视辟谣WiFi辐射危害:孕妇穿辐射装多此一举

热门文章

  1. 通过挑土豆—我学会了如何区分JS数组的遍历方法
  2. Three.js 实现虎年春节3D创意页面
  3. Mac和Win7双系统 + 完美文件共享
  4. helm3.7.2及helm-push_0.10.1安装及使用
  5. HTML/CSS学习笔记(1)
  6. OSPF在NBMA网络中的五种模式
  7. Qt中用户界面的User Interface Compiler(uic)机制的相关说明
  8. layui 使用文档总结
  9. 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题
  10. 最强国产开源电子表格-Luckysheet,强势登顶Github trending第一名!