顺序查找(线性查找)

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

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. js处理小数加减时精度失真

    最近公司业务有用js处理数据加减,但有时候会出现很多位小数:后来发现是js处理小数时精度失真:为了后边不在犯类似错误,笔者觉得有必要记录下处理方法,当然处理方法有很多种,这里笔者找了一种较为简洁的方法 ...

  2. 15-EasyNetQ之对延迟消息插件的支持

    RabbitMQ延迟消息插件仍然在实验阶段.你使用这个功能要自担风险. RabbitMQ延迟消息插件为RabbitMQ增加了新的交换机类型,允许延时消息投递. EasyNetQ为交换机通过定义一种新的 ...

  3. zookeeper java api(使用java代码操作zookeeper)

    1 导入相关的pom依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId&g ...

  4. C#使用HttpHelper类抓取html网页内容

    HttpHelper类(苏飞版)下载地址: http://www.sufeinet.com/thread-3-1-1.html 使用方法及说明(摘自:http://blog.csdn.net/smar ...

  5. 【原创】3. MYSQL++ Query类型与SQL语句执行过程(非template与SSQLS版本)

    我们可以通过使用mysqlpp:: Query来进行SQL语句的增删改查. 首先来看一下mysqlpp::Query的一些最简单的调用, conn.connect(mysqlpp::examples: ...

  6. 【bzoj1018】[SHOI2008]堵塞的交通traffic

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2887  Solved: 954[Submit ...

  7. C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)

    C# 把一个文件夹下所有文件复制到另一个文件夹下   public static void CopyDirectory(string srcPath, string destPath) { try { ...

  8. Python3.7安装Django

    一.系统环境 操作系统:Win7 64位 Python版本:3.7 二.安装参考 Django的下载网址:https://www.djangoproject.com/download/ 当前最新版本: ...

  9. Free GIS Software

    Refer to There are lots of free gis software listed in the website: http://www.freegis.org/ http://w ...

  10. python3--装饰器高级学习版

    __author__ = "Aaron Fan"import time #导入time模块user,passwd = 'alex','abc123' #用户名密码def auth( ...