查找(一)静态表查找
来源:互联网 发布:软件体系架构 pdf 编辑:程序博客网 时间:2024/06/05 04:15
静态表查找包括:顺序表查找、有序表查找、静态树表查找、索引表查找
具体原理这里不叙述,详见严蔚敏《数据结构》。
1、顺序表查找
//SequenceTableSearch.c#include <stdio.h>#include <stdlib.h>#include <string.h>typedef char KeyType;//定义关键字类型typedef struct{ KeyType key;}ElemType;//定义元素类型//定义静态查找表的顺序存储结构typedef struct { ElemType *elem; int length;}SSTable;//此函数在顺序表中顺序查找关键字等于key的数据元素。int Search_Seq(SSTable ST, KeyType key){ //若找到,则函数值为该元素在表中的位置,否则返回0 int i; ST.elem[0].key = key;//第0个元素做哨兵 for (i = ST.length; strcmp(ST.elem[i].key, key); i++) ;//从后往前找 return i;}
2、有序表查找
有序表查找可以用多种查找方法,包括:折半查找、斐波那契查找、插值查找。
折半查找最为常见。
//BinarySearch.c#include <stdio.h>#include <stdlib.h>#include <string.h>typedef char KeyType;//定义关键字类型typedef struct{ KeyType key;}ElemType;//定义元素类型//定义静态查找表的顺序存储结构typedef struct { ElemType *elem; int length;}SSTable;//此函数在有序表ST中折半查找其关键字等于key的数据元素int Search_Bin(SSTable ST, KeyType key){ //若找到,函数返回该元素在表中的位置。否则返回0 int low = 1,high=ST.length,mid; while (low<=high){ mid = (low + high) / 2; if (!strcmp(key,ST.elem[mid].key)){ return mid; }else if(strcmp(key,ST.elem[mid].key)<0){ high = mid - 1; }else{ low = mid + 1; } } return 0;}
3、静态树表查找
静态树表可以是:静态最优查找树(Static Optimal Search Tree)、次优查找树(Nearly Optimal Search Tree)
这里给出次优查找树的建立。
//CreateSecondOptimalBiTree.c#include <stdio.h>#include <stdlib.h>#include <math.h>typedef char KeyType;//定义关键字类型typedef struct{ KeyType key;}ElemType;//定义元素类型typedef struct BiTNode{ ElemType data; struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;//data fieldint i;int min;int dw;//(读此代码必须看教科书算法原理描述)//此函数创建一个次优查找树void CreateSecondOptimalBiTree(BiTree T, ElemType R[], float sw[], int low, int high){ //由有序表R[low...high]及其累计权值表sw(其中sw[0]==0)递归构造次优查找树 i = low; min = abs(sw[high] - sw[low]); dw = sw[high] + sw[low - 1]; for (int j = low+1; j <=high; j++){//选择最小的△Pi值 if (abs(dw-sw[j]-sw[j-1])<min){ i = j; min = abs(dw - sw[j] - sw[j - 1]); } } T = (BiTree)malloc(sizeof(BiTNode)); T->data = R[i];//生成结点(第一次生成根) if (i == low) T->lchild = NULL;//左子树空 else CreateSecondOptimalBiTree(T->lchild, R, sw, low, i - 1);//构造左子树 if (i == high) T->rchild = NULL;//右子树空 else CreateSecondOptimalBiTree(T->rchild, R, sw, i + 1, high);//构造右子树}
4、索引表查找
详见教材。
1 0
- 查找(一)静态表查找
- 查找算法整理(一)---静态查找表:顺序表查找、折半(判定树)查找、静态查找树
- 查找(静态查找表)
- 静态查找表(一)顺序表的查找
- 查找:静态查找表
- 数据结构--查找(静态查找表)
- 查找(一)静态查找的顺序查找和 有序折半查找
- 数据结构 查找 静态查找表
- 查找之静态查找表
- 面试-查找(静态查找,动态查找)
- 数据结构之查找一静态查找
- 数据结构之查找一静态查找
- 静态查找表:顺序查找、折半查找、分块查找
- 静态查找表:顺序查找、折半查找、分块查找
- 算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)
- 静态查找表(二)有序表的查找
- 静态表查找--顺序表的查找(无序)
- 静态查找表
- 黑马程序员——Java基础---集合(第18天 )
- S3C2410按键poll
- 【Leetcode Algorithm】Power of Two
- Android 增强版百分比布局库 为了适配而扩展
- 数据在计算机中的存储形式和运算( 原码,反码,补码)&=, |=, >>=, <<=, ∧=
- 查找(一)静态表查找
- Mali GPU OpenGL ES 应用性能优化--测试+定位+优化流程
- "n\x45y\123\t"长度
- Insert Interval Array
- Android 进阶学习:Android自定义View的实现方法,带你一步步深入了解View(四)
- Xcode_缓存清理
- Codeforces Round #229 (Div. 2) A. Inna and Alarm Clock
- sql中DISTINCT的用法
- HttpServletRequest对象