首页 > 编程语言 > 详细

c语言数据结构学习心得——查找

时间:2019-03-28 23:16:37      阅读:178      评论:0      收藏:0      [点我收藏+]

顺序查找(线性查找)

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

int Search1(int a[],int n,int key){
   for(int i=1;i<=n;i++){             //注意从1开始
      if(a[i]==key)return i;          //查找成功
   }
   return 0;                          //查找失败
}
int Search2(int a[],int n,int key){
   int i=n;
   a[0]=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;

 

c语言数据结构学习心得——查找

原文:https://www.cnblogs.com/suprechen/p/10618446.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!