目录

  • 1 绪论
    • 1.1 数据结构的定义和基本术语
    • 1.2 数据的逻辑结构和存储结构
    • 1.3 算法和算法分析
  • 2 线性表
    • 2.1 线性表的定义及逻辑结构
    • 2.2 顺序存储结构
    • 2.3 链式存储结构
    • 2.4 应用:一元多项式的表示和相加
  • 3 栈和队列
    • 3.1 栈
    • 3.2 队列
  • 4 串
    • 4.1 资源
  • 5 数组
    • 5.1 数组
    • 5.2 广义表
  • 6 树和二叉树
    • 6.1 树的定义和基本术语
    • 6.2 二叉树
    • 6.3 遍历二叉树和线索二叉树
    • 6.4 树和森林
    • 6.5 哈夫曼树及其应用
  • 7 图
    • 7.1 图的定义和基本术语
    • 7.2 图的存储结构
    • 7.3 图的遍历
    • 7.4 图的应用
  • 8 查找
    • 8.1 查找的基本概念
    • 8.2 基于线性表的查找
    • 8.3 基于树的查找
    • 8.4 哈希表
  • 9 内部排序
    • 9.1 排序的定义和种类
    • 9.2 插入排序
    • 9.3 B-树和B+树
    • 9.4 交换排序
    • 9.5 选择排序
    • 9.6 归并排序和基数排序
  • 10 实验
    • 10.1 目的要求
      • 10.1.1 参考代码
基于线性表的查找

1  顺序查找

顺序查找又称线性查找,是最基本的查找方法之一。它以顺序表或线性链表表示静态查找表。其查找方法为:从表的最后一个记录开始,逐个按给定值与关键字进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与给定值相同的关键字,则查找失败。

 

【算法8.1】数据元素从下标为1的数组单元开始存放,0号单元留空。

int  s_search(SSTable  tblKeyType  k)

{        //在表tbl中查找关键码为k的数据元素,若找到返回该元素在数组中的下标,否则返回0

    tbl.elem[0].key = k; 

//存放监测,这样在从后向前查找失败时,不必判表是否检测完,从而达到算法统一\

    for( i = tbl.length ; tbl.elem[i].key != k i-- );       //从表尾端向前找\

    return  i

} 

顺序查找缺点是当n很大时,平均查找长度较大,效率低;优点是对表中数据元素的存储没有要求。另外,对于线性链表,只能进行顺序查找。

2  折半查找

折半查找又称二分查找(Binary Search),是一种查找效率较高的查找方法。折半查找对待查的线性表有两个要求:

1必须采取顺序存储结构;

2必须按关键字大小排序的有序表。

其查找基本思想为:在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键相等,则查找成功;若给定值小于中间元素的关键,则在中间元素的左半区继续查找;若给定值大于中间元素的关键,则在中间元素的右半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,查找失败。