编程珠玑第十三章----查找
来源:互联网 发布:文件管理器软件 编辑:程序博客网 时间:2024/05/17 08:44
1、顺序查找
int find1(int *array,int n,int val){if (n<=0){return -1;}for (int i=0;i<n;i++){if (val==array[i]){return i;}}return -1;}
2、二分查找
int find2(int *array,int n,int val){if (n<=0){return -1;}int begin=0,end=n-1,mid;while(begin<=end) {mid=(begin+end)/2;if (array[mid]==val)return mid;else if(array[mid]>val)end=mid-1;elsebegin=mid+1;}return -1;}
3、二叉查找树
//二叉查找树数据结构typedef struct Btree {int data;Btree *left;Btree *right;}*PBTree;//创建二叉查找树,返回树的根节点PBTree CreateBTree(int *array,int n){PBTree root=new Btree;root->data=array[0];root->left=NULL;root->right=NULL;PBTree current,back,pNew;for (int i=1;i<n;i++){pNew=new Btree;pNew->data=array[i];pNew->left=pNew->right=NULL;current=root;while(current!=NULL) //找到合适的插入位置{back=current;if(current->data>array[i])current=current->left;elsecurrent=current->right;}if(back->data>array[i])back->left=pNew;elseback->right=pNew;}return root;}//利用二叉查找树进行递归查找bool find3(PBTree root,int val){if (root==NULL)return false;if (root->data==val)return true;else if(root->data>val)return find3(root->left,val);elsereturn find3(root->right,val);}
4、哈希查找(除留取余法+链式法)
#define MAX 10 //链表数据结构typedef struct list {int data;list *next;}*pList;list hashtable[MAX]; ///链式法解决地址冲突,MAX个带头节点的hash链表//除留取余法int hashFunc(int n) {return n%MAX;}//创建hash链表void createhash(int *array,int n) {pList p,pNew;for (int i=0;i<n;i++){pNew=new list;pNew->data=array[i];pNew->next=NULL;int pos=hashFunc(array[i]);p=hashtable[pos].next;if (p!=NULL) //将新的节点插入到头结点的后面{pNew->next=p;hashtable[pos].next=pNew;} else{hashtable[pos].next=pNew;}}}//hash查找bool SearchHash(int val) {int pos=hashFunc(val); //找出在哪个hash链表pList p=hashtable[pos].next; //遍历对应的链表while(p!=NULL){if(p->data==val)return true;p=p->next;}return false;}//遍历hashtablevoid TraverseHashtable(){for (int m=0;m<MAX;m++) //一次遍历每个链表里面的内容{pList p1=hashtable[m].next;while(p1!=NULL){cout<<p1->data<<" ";p1=p1->next;}}cout<<endl;}
- 编程珠玑第十三章----查找
- 【编程珠玑】第十三章 搜索
- 编程珠玑 第十三章 习题4 思考
- 二分查找另类--【编程珠玑第四章】
- 编程珠玑(2)第十三章学习笔记
- 绝妙的取样(《编程珠玑(续)》第十三章)
- 【编程珠玑】第二章 二分查找的巧妙应用
- 【编程珠玑】第二章 二分查找的巧妙应用
- 《编程珠玑》第二章2.1 二分查找不存在的数
- 编程珠玑_第十三章_生成一个随机整数的有序集合
- c++二分查找—来自编程珠玑
- 二分查找递归实现--【编程珠玑】
- 二分查找非递归实现--【编程珠玑】
- 《编程珠玑》之变位词查找
- 编程珠玑第二章
- 编程珠玑第三章
- 编程珠玑第四章
- 编程珠玑第五章
- 关于CLASS , SEL, IMP的说明
- 正则表达式用法---初学者的福音
- android java代码覆盖率
- DateTime.Now.Tostring("xxxx")
- jsp自定义标签相关问题
- 编程珠玑第十三章----查找
- 利用webBrowser获取框架内Html页面内容
- NameNode HA 采用方案
- emacs 安装颜色主题
- 面试小题
- LNMP环境搭建
- gcov/lcov查看代码运行覆盖率
- 数据库分库分表(sharding)系列(四) 多数据源的事务处理
- HTTP 协议相关