c语言数据结构学习心得——查找
顺序查找(线性查找)
主要用于在线性表中的查找
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语言数据结构学习心得——查找的更多相关文章
- c语言数据结构学习心得——图
图G由顶点集V和边集E组成,记为G=(V,E) 图不可为空,一定有顶点集不为空 有向图:有向边(弧)的有限集合 无向图:无向边的有限集合 连通:顶点V到顶点V'有路径 连通分量:无向图中的极大连通子图 ...
- c语言数据结构学习心得——排序
排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后 ...
- c语言数据结构学习心得——二叉树
二叉树 n(n>=0)个结点的有限集合:(五种形态) 1.或者为空二叉树,n=0: 2.或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成.左子树和右子树又分别是一棵二叉树. 3.每个 ...
- c语言数据结构学习心得——树
树 一对多的树型结构,有且只有一个特定的根结点. 结点的度:结点拥有子树的数量{ 度为0:叶子结点/终端结点. 度不为0:非终端结点/分支结点(除去根结点其它称为内部结点).} 树的度:树中所有结点的 ...
- c语言数据结构学习心得——队列
队列 只允许在一端进行插入,在另一端进行删除的线性表 队头(Front):允许删除的一端(队首) 队尾(Rear):允许插入的一端 FIFO:先进先出 不要求从数组首位开始存储队列 #define M ...
- c语言数据结构学习心得——栈
栈(Stack) 只允许在一端进行插入或删除操作的线性表 栈顶(Top):栈中允许进行插入和删除操作的那一端: 栈底(Bottom):固定的,不允许进行插入或删除的另一端 1.栈是受限的线性表,所以自 ...
- c语言数据结构学习心得——线性表
线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...
- c语言数据结构学习心得——数据结构基本概念
1.数据>数据元素>数据项 数据的基本单位是数据元素,数据元素的基本单位是数据项 2.运算的定义->针对逻辑结构 集合:同属于一个集合,无其他关系.(数学上的集合) 线性结 ...
- 获奖感言和C语言的学习心得
获奖感言和C语言的学习心得 自我介绍: 大家好,我的名字叫袁忠,我来自湖南,今年快19岁了,现在是大学一年级,我平时喜欢跑步.打羽毛球,我也喜欢学算法与数学,以及喜欢看一些与计算机有关的书籍,每次我学 ...
随机推荐
- 主表当中明细表字段的金额计算问题,操作控件是在gridview+aspnetPage
做这个例子,主要是我在工作当中遇到一个主表的明细表的操作计算问题,也用了不少时间.操作计算的方式是这样的. 这个功能是在.net语言当中实现,操作过程当点击添加行,添加第一行时,当我输入金额的时候,累 ...
- 每天一个Linux命令 - 【groupadd】
[命令]:grouadd [语法]:groupadd [选项] [参数] [功能介绍]:groupadd 命令勇于创建新的工作组,新工作组的信息将被添加的系统文件中. [选项说明]: -g < ...
- TensorFlow模型保存和提取方法
一.TensorFlow模型保存和提取方法 1. TensorFlow通过tf.train.Saver类实现神经网络模型的保存和提取.tf.train.Saver对象saver的save方法将Tens ...
- Variable hoisting Function hoisting
Variable hoisting Another unusual thing about variables in JavaScript is that you can refer to a var ...
- Loadrunner Analyze
Analysis 对controller运行的结果进行分析 1.首先必须明确:光靠Analysis是不行的,只要能通过Analysis分析出部分问题就已经很不错了, 善于利用它才是最关键的. 2.如何 ...
- /error处理
1 BasicErrorController 1.1 简述 SpringMVC框架在出现错误时有一个默认的错误请求 /error:出现异常之后执行/error请求之前框架会判断出现异常的请求类型,然后 ...
- HTTP防盗链与反防盗链
HTTP防盗链 通过上一次,我没对HTTP请求不再那么陌生了.防盗链无非就是别人来请求自己网站的信息,用于其他网站,那么如果我们能识别请求是来自那个网站,如果是外网,那么就重定向等其他处理.但在web ...
- App性能测试工具使用说明-MobilePerformance
一. 环境搭建 安装Android SDK 1.6或者1.7版本均可,建议1.7,环境变量的配置,Java SDK的安装很简单,不赘述了. 安装SDK 1.安装Android SDK: 2.安装完毕后 ...
- 【Azure Active Directory】单一登录 (SAML 协议)
Azure Active Directory 支持 SAML 2.0 Web 浏览器单一登录 (SSO) 配置文件. 若要请求 Azure Active Directory 对用户进行身份验证时,云服 ...
- DataAnnotationsModelValidator-基于数据注解方式的model验证器
http://www.cnblogs.com/artech/archive/2012/04/10/how-mvc-works.html http://www.cnblogs.com/artech/ar ...