顺序表的查找
2015-11-18 00:23
330 查看
顺序表的查找
内容:
(1)随机产生n个两位整数,构造一个查找表。
(2)输入一个整数,利用顺序查找法在查找表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。
(3)对查找表按递增顺序进行排序。
(4)输入一个整数,利用折半查找法在有序表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。
(5)输入整组数无序,但局部有序的一组整数,建立查找表,输入一个整数,利用分块查找法查找该数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。
内容:
(1)随机产生n个两位整数,构造一个查找表。
(2)输入一个整数,利用顺序查找法在查找表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。
(3)对查找表按递增顺序进行排序。
(4)输入一个整数,利用折半查找法在有序表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。
(5)输入整组数无序,但局部有序的一组整数,建立查找表,输入一个整数,利用分块查找法查找该数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。
#include<stdio.h> #include<stdlib.h> typedef struct elem{ int key; int location; //记录的位置 }elem; typedef struct node{ elem* base; int length; }SStable; void Creattable(SStable &s) { int i; printf("请输入表的长度:\n"); scanf("%d",&s.length); s.base=(elem*)malloc(s.length*sizeof(elem)); for (i=1;i<=s.length;i++) { s.base[i].key=rand()%90+10; s.base[i].location=i; } } int Search(SStable s,int n) { int i; s.base[0].key=n; for (i=s.length;i>>=0;i--) if (s.base[i].key==n) return s.base[i].location; return 0; } void Sort(SStable &s) { int i,j,k; elem temp; for (i=1;i<s.length;i++) { k=i; for (j=i+1;j<=s.length;j++) if (s.base[k].key>s.base[j].key) k=j; if (k!=i) { temp=s.base[k]; s.base[k]=s.base[i]; s.base[i]=temp; } } for (i=1;i<=s.length;i++) printf("关键字:%d 位置:%d\n",s.base[i].key,s.base[i].location); } int fenzhi(SStable s,int n) { int low=1,high=s.length,mid; while (low<=high) { mid=(low+high)/2; if (s.base[mid].key==n) return s.base[mid].location; else if (s.base[mid].key<n) low=mid+1; else high=mid-1; } return 0; } int Binsearch(SStable &s) { int i,m,n,k,j; int b[10],key; //b数组用来记录每块中最大值 printf("请输入表的长度以及块数.\n"); scanf("%d%d",&s.length,&n); m=s.length/n; s.base=(elem*)malloc(s.length*sizeof(elem)); i=1; j=1; b[1]=0; while (i<=s.length) { scanf("%d",&s.base[i].key); s.base[i].location=i; if (b[j]<s.base[i].key) b[j]=s.base[i].key; if (i%m==0) { j++; b[j]=0; } i++; } for (i=1;i<=s.length;i++) printf("%d ",s.base[i].key); printf("\n"); printf("请输入关键值:\n"); scanf("%d",&key); if (b[j]<key) return 0; k=1; while (b[k]<key) k++; for (i=(k-1)*m+1;i<=k*m;i++) if (key==s.base[i].key) return s.base[i].location; for (i=j*m+1;i<=s.length;i++) //对于不足以构成一个块的数组进行扫描 if (key==s.base[i].key) //不太对题意,相当于多分出一个块,现在没想出更好的方法来解决 return s.base[i].location; return 0; } int main() { SStable s; int key,m,n; Creattable(s); printf("请输入要查找的关键值:\n"); scanf("%d",&key); m=Search(s,key); if (m) printf("位置是%d.\n",m); else printf("该表中不存在该关键字\n"); printf("经过排序后得:\n"); Sort(s); printf("请输入要查找的关键值:\n"); scanf("%d",&key); m=fenzhi(s,key); if (m) printf("位置是%d.\n",m); else printf("该表中不存在该关键字\n"); n=Binsearch(s); if (!n) printf("查找失败.\n"); else printf("位置是%d.\n",n); return 0; }
相关文章推荐
- Chapter 5-04
- 解决在 WP8/ WP8.1 项目中 引用 C++ 组件时出现的 System.TypeLoadException 错误
- Visual Studio 要求导入 pfx 密钥以及导入后依然要求导入的解决办法
- Android蓝牙开发的一些经验
- babel无法编译?
- null相关
- Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统
- [1108]:最小公倍数
- ubuntu 执行make menuconfig ARCH=arm
- HttpClient-----4、使用HttpClient进行POST方式通信
- 开发者文档之多线程编程指南学习笔记
- AndroidStudio 编译错误
- CentOS 搭建 nginx + tomcat
- c++ 默认构造函数,构造函数,复制构造函数,赋值操作符,析构函数调用示例
- HttpClient-----3、使用HttpClient进行GET方式通信
- linux sed命令详解
- Polygon Table - Google Chrome
- Unity键值意义
- 物联网与嵌入式系统概论-week3- Hardware and Software-Lesson3: Operating Systems
- 对sublime的认识(1)