第14周项目1-验证算法(2)
2015-11-30 16:56
489 查看
问题及代码:
/*
*烟台大学计算机与控制工程学院
/*
*Copyright (c) 2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:lulu.cpp
*作者:芦亚茹
*完成日期:2015年11月16日
*版本号:v1.o
*
*问题描述:认真阅读并验证分块查找算法。请用22,4,23,11,20,2,15,13,30,45,26,34,29,
35,26,36,55,98,56, 74,61,90,80,96,127,158,116,14,128,113,115,102,184,
211,243,188,187,218,195,210,279,307,492,452,408,361,421,399,856,523,
704,703,697,535,534,739(共n=56个数据,每块数据个数s=8)
作为数据表,自行构造索引表,分别对查找61、739、200进行测试。
*/
知识点及总结:
分块查找要求由特殊索引方式来存储线性表,表是分块有序的,索引表是一个递增有序表
/*
*烟台大学计算机与控制工程学院
/*
*Copyright (c) 2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:lulu.cpp
*作者:芦亚茹
*完成日期:2015年11月16日
*版本号:v1.o
*
*问题描述:认真阅读并验证分块查找算法。请用22,4,23,11,20,2,15,13,30,45,26,34,29,
35,26,36,55,98,56, 74,61,90,80,96,127,158,116,14,128,113,115,102,184,
211,243,188,187,218,195,210,279,307,492,452,408,361,421,399,856,523,
704,703,697,535,534,739(共n=56个数据,每块数据个数s=8)
作为数据表,自行构造索引表,分别对查找61、739、200进行测试。
*/
#include <stdio.h> #define MAXL 100 //数据表的最大长度 #define MAXI 20 //索引表的最大长度 typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; //KeyType为关键字的数据类型 InfoType data; //其他数据 } NodeType; typedef NodeType SeqList[MAXL]; //顺序表类型 typedef struct { KeyType key; //KeyType为关键字的类型 int link; //指向对应块的起始下标 } IdxType; typedef IdxType IDX[MAXI]; //索引表类型 int IdxSearch(IDX I,int m,SeqList R,int n,KeyType k) { int low=0,high=m-1,mid,i; int b=n/m; //b为每块的记录个数 while (low<=high) //在索引表中进行二分查找,找到的位置存放在low中 { mid=(low+high)/2; if (I[mid].key>=k) high=mid-1; else low=mid+1; } //应在索引表的high+1块中,再在线性表中进行顺序查找 i=I[high+1].link; while (i<=I[high+1].link+b-1 && R[i].key!=k) i++; if (i<=I[high+1].link+b-1) return i+1; else return 0; } int main() { int i,n=56,m=8,j; SeqList R; IDX I= {{23,0},{45,8},{98,16},{158,24},{243,32},{492,40},{856,48}}; KeyType a[]= {22,4,23,11,20,2,15,13, 30,45,26,34,29,35,26,36, 55,98,56,74,61,90,80,96, 127,158,116,114,128,113,115,102, 184,211,243,188,187,218,195,210, 279,307,492,452,408,361,421,399, 856,523,704,703,697,535,534,739}; KeyType x=739; for (i=0; i<n; i++) R[i].key=a[i]; j=IdxSearch(I,m,R,n,x); if (j!=0) printf("%d是第%d个数据\n",x,j); else printf("未找到%d\n",x); return 0; }运行结果:
知识点及总结:
分块查找要求由特殊索引方式来存储线性表,表是分块有序的,索引表是一个递增有序表
相关文章推荐
- 第十四周项目4—是否二叉排列树
- [OpenCV] 编译源程序 2.4.10 以支持 CUDA
- 五种常见粗粮的最佳养生吃法
- 概率论复习 – 基础概率分布
- 树莓派安装Linux操作系统
- shell 脚本
- VS快速生成JSON数据格式对应的实体
- Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)
- Java内功提升之static的使用
- PHP捕获Fatal error错误的方法
- 14周-查找(一)-知原理
- iOS开发网络篇—文件的上传
- 数据挖掘中分类与预测的区别
- GNU make 使用笔记 (一)
- MD5Encrypt
- 创建百度地图开发者应用API 密匙
- 传智播客Java学习路线图
- FlasActionScript3随学随机
- PetaPoco入门
- Android自定义通知布局Notification,点击Notification导航切换回原Activity