顺序查找(线性查找)

主要用于在线性表中的查找

int Search1(int a[],int n,int key){
for(int i=;i<=n;i++){ //注意从1开始
if(a[i]==key)return i; //查找成功
}
return ; //查找失败
}
int Search2(int a[],int n,int key){
int i=n;
a[]=key; //设置“哨兵”
while(a[i]==key){ //若不是找的元素
i--; //从前往后查找
}
return i; //查找失败也返回0
}

折半查找

仅适用于有序的顺序表

算法思路:首先将给定值key与表中中间位置的元素的关键字比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间的元素以外的前半部分或后半部分中。然后在缩小的范围内继续进行同样的查找,如此重复知道找到为止,或者确定表中元素无所需的查找元素,则失效,返回失败信息。

分块查找(索引顺序查找)

1.确定待查找值在哪个块(折半查找)

2.在确定的块中查找待查找值(顺序查找)

二叉排序树(Binary Search Tree 二叉搜索树)

或是一棵空树,或是具有以下性质的二叉树

1.若左子树不空,则左子树上所有结点值均小于其根结点的值

2.若右子树不空,则右子树上所有结点值均小于其根结点的值

3.左右子树也是一棵二叉排序树

二叉排序树的目的不是为了排序,是为了提高查找(有序)和插入删除(树型结构)关键字的速度。

typedef struct BiTNode{              //二叉排序树结点结构
int data; //结点数据
struct BiTNode *lchild,*rchild; //指向该结点左右孩子的指针
}BiTNode,*BiTree

一.二叉排序树查找关键字代码

递归代码:

BiTNode *BST_Search(BiTNode *t,ElemType key){
if(t==NULL)return NULL; //若树为空则为空值
else{
if(t->key==key)return t;
else if(key<t->key)return BST_Search(t->lchild,key);
else if(key>t->key)return BST_Search(t->rchild,key);
}
}

非递归代码:

BiTNode *BST_Search(BiTNode *t,ElemType key){
BiTNode *p=t; //工作指针,初值指向二叉排序树根结点
while(p!=NULL&&key!=p->data){ //p不为空且没找到key
if(key<p->data) p=p->lchild; //若key值比p指向结点小,查左子树
else p=p->rchild; //若key值比p指向结点小,查右子树
return p; //成功返回p,失败返回NULL
}}

二叉排序树插入关键字代码:

1).空树:直接插入新结点返回成功

2).树不空:检查是否存在关键字重复的结点

(1)存在:返回插入失败

(2)不存在:检查根结点的值和待插入关键字值的大小关系递归插入左右子树中

int BST_Insert(BiTNode* &t,ElemType k){          //插入操作是要对树进行修改,所以是引用类型的指针
if(t==NULL){ //原树为空,新插入的记录为根结点
t=(BiTNode*)malloc(sizeof(BiTNode)); //malloc库函数分配新结点的存储空间
t->key=k; //该结点的关键值赋值给k
t->lchild=t->rchild=NULL; //该结点初始左右孩子为空
return ; //返回1,表示成功
}
else if(k==t->key) //树中存在相同关键字结点,失效
return ;
else if(k<t->key) //插入到t的左子树中
return BST_Insert(t->lchild,k);
else //插入到t的右子树中
return BST_Insert(t->rchild,k);
}

AVL平衡二叉树

特殊的二叉排序树,在于左右子树的高度差绝对值不超过1,且左右子树又是一棵平衡二叉树。

定义:结点左子树与右子树的高度差为该结点的平衡因子,则其只能是-1,0或1。

结论:假设Nh表示深度为h的平衡二叉树中含有的最少结点数,显然,N0=0,N1=1,N2=2,并且有Nh=Nh-1+Nh-2+1。

c语言数据结构学习心得——查找的更多相关文章

  1. c语言数据结构学习心得——图

    图G由顶点集V和边集E组成,记为G=(V,E) 图不可为空,一定有顶点集不为空 有向图:有向边(弧)的有限集合 无向图:无向边的有限集合 连通:顶点V到顶点V'有路径 连通分量:无向图中的极大连通子图 ...

  2. c语言数据结构学习心得——排序

    排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后 ...

  3. c语言数据结构学习心得——二叉树

    二叉树 n(n>=0)个结点的有限集合:(五种形态) 1.或者为空二叉树,n=0: 2.或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成.左子树和右子树又分别是一棵二叉树. 3.每个 ...

  4. c语言数据结构学习心得——树

    树 一对多的树型结构,有且只有一个特定的根结点. 结点的度:结点拥有子树的数量{ 度为0:叶子结点/终端结点. 度不为0:非终端结点/分支结点(除去根结点其它称为内部结点).} 树的度:树中所有结点的 ...

  5. c语言数据结构学习心得——队列

    队列 只允许在一端进行插入,在另一端进行删除的线性表 队头(Front):允许删除的一端(队首) 队尾(Rear):允许插入的一端 FIFO:先进先出 不要求从数组首位开始存储队列 #define M ...

  6. c语言数据结构学习心得——栈

    栈(Stack) 只允许在一端进行插入或删除操作的线性表 栈顶(Top):栈中允许进行插入和删除操作的那一端: 栈底(Bottom):固定的,不允许进行插入或删除的另一端 1.栈是受限的线性表,所以自 ...

  7. c语言数据结构学习心得——线性表

    线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...

  8. c语言数据结构学习心得——数据结构基本概念

    1.数据>数据元素>数据项      数据的基本单位是数据元素,数据元素的基本单位是数据项 2.运算的定义->针对逻辑结构 集合:同属于一个集合,无其他关系.(数学上的集合) 线性结 ...

  9. 获奖感言和C语言的学习心得

    获奖感言和C语言的学习心得 自我介绍: 大家好,我的名字叫袁忠,我来自湖南,今年快19岁了,现在是大学一年级,我平时喜欢跑步.打羽毛球,我也喜欢学算法与数学,以及喜欢看一些与计算机有关的书籍,每次我学 ...

随机推荐

  1. Eclipse 代码风格配置

    代码风格配置:

  2. Sequence(尺取)

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...

  3. django 定时脚本

    python 第三方定时执行 from datetime import datetime import time import os from apscheduler.schedulers.backg ...

  4. POJ1657

    1.题目链接地址 http://poj.org/problem?id=1657 2.源代码 #include<iostream> using namespace std; int main ...

  5. js的简单介绍及基本用法

    1. JS的简介 概述: JavaScript, 是一门弱类型语言, 用来给页面增加动态功能的. //弱类型语言: 对数据的数据类型划分不精细(不明确). 特点: A. JavaScript 是一种轻 ...

  6. 把List<string>转为DataTable

    //把List<string>转为DataTable List<string> myList = new List<string>(); DataTable dt2 ...

  7. JavaScript(JS)实现省市联动选择下拉列表

    在开发一个应用的时候需要用刀省市联动的下拉列表,网上找到不少.但是要么太复杂,难以修改:要么根本就用不了,最后自己在一个示例中提取出数据,然后自己写了一个,简单易懂,适合新手... 代码如下: Pro ...

  8. C#实现访问网络共享文件夹

    C#实现访问网络共享文件夹,使用 WNetAddConnection2A 和 WNetCancelConnection2A. 在目标服务器建立共享文件夹,建立访问账号test; public enum ...

  9. Django--form生成select标签

    需求 Django--form表单中的select生成方法,如果select中的选项不固定,需要怎么操作. 速查 1.固定select选项 forms 1 2 3 class 表单类名称(forms. ...

  10. 使用 append 方法追加元素

    来自于<sencha touch 权威指南> 学习使用 Ext.DomHelper 组件在页面中追加元素.app.js代码如下: Ext.require(['Ext.form.Panel' ...