数据结构C语言版之查找(折半选择快速等)
来源:互联网 发布:地图 数据可视化工具 编辑:程序博客网 时间:2024/05/29 10:25
//查找:#include<stdio.h>#include<time.h>#include<stdlib.h>typedef struct{int *elem;int length;}SStable;typedef struct SYlist{int num;int *Key;int *start;}SYlist;void CreatSearchlist(SStable &S){int i;printf("请输入表长:\n");scanf("%d",&S.length);S.elem=(int*)malloc((S.length)*sizeof(int));for(i=1;i<S.length;i++)S.elem[i]=rand()%89+10;}int Search(SStable S,int key){S.elem[0]=key;while(S.elem[S.length]!=key)S.length--;return S.length;}void ShowSStable(SStable S){int i;for(i=1;i<S.length;i++)printf("%5d",S.elem[i]);printf("\n");}void Sort(SStable &S){int i,j,temp;for(i=1;i<S.length-1;i++){for(j=1;j<S.length-i-1;j++){if(S.elem[j]>S.elem[j+1]){temp=S.elem[j];S.elem[j]=S.elem[j+1];S.elem[j+1]=temp;}}}ShowSStable(S);}int Zbsearch(SStable S,int e){int mid,high=S.length-1,low=1;while(low<=high){mid=(low+high)/2;if(S.elem[mid]==e)return mid;else if(S.elem[mid]<e)low=mid+1;elsehigh=mid-1;}return 0;}void CreatSylist(SYlist &sy,SStable &S){int i,n;printf("\n\n\n建立索引表:\n");printf("请输入数据个数:\n");scanf("%d",&n);S.length=n+1;S.elem=(int*)malloc((S.length)*sizeof(int));printf("请输入一组数(局部有序):\n");for(i=1;i<S.length;i++)scanf("%d",&S.elem[i]);printf("请输入关键字个数:\n");scanf("%d",&sy.num); sy.Key=(int*)malloc(sy.num*sizeof(int));sy.start=(int*)malloc(sy.num*sizeof(int));for(i=0;i<sy.num;i++){ printf("请输入第%d个关键字:\n",i+1);scanf("%d",&sy.Key[i]);printf("请输入该关键字的位置:\n");scanf("%d",&sy.start[i]);}}int Sysearch(SYlist sy,SStable S,int m){int i=0,j;while(m>sy.Key[i])i++;if(i>0 && i<sy.num-1){for(j=sy.start[i];j<sy.start[i+1];j++){if(S.elem[j]==m)return j;}} if(i==0){for(j=1;j<sy.start[1];j++){if(S.elem[j]==m)return j;}}if(i>=sy.num-1){for(j=sy.start[sy.num];j<S.length;j++){if(S.elem[j]==m)return j;}}}int main(){SStable S;SYlist sy;int key,e,m;srand(time(0));CreatSearchlist(S);printf("随机产生的%d个两位数构造的查找表为:\n",S.length-1);ShowSStable(S);printf("\n请输入要查找的数:");scanf("%d",&key);if(Search(S,key))printf("查找成功!该数在表中的位置为:%d\n",Search(S,key));elseprintf("查找失败!\n"); printf("对表中数据按递增进行排序后的序列为:\n");Sort(S);printf("\n请输入要查找的数:");scanf("%d",&e);if(Zbsearch(S,e))printf("折半查找成功!该数在表中的位置为:%d\n",Zbsearch(S,e));elseprintf("查找失败!\n");CreatSylist(sy,S);printf("\n请输入要查找的数:");scanf("%d",&m);Sysearch(sy,S,m); if(Sysearch(sy,S,m))printf("查找成功!该数在表中的位置为:%d\n",Sysearch(sy,S,m));elseprintf("查找失败!\n");return 0;}
0 0
- 数据结构C语言版之查找(折半选择快速等)
- 数据结构C语言版折半查找
- 折半查找法/C语言版
- 数据结构与算法(C语言版)__递归的折半查找
- 数据结构c语言版之简单选择排序
- 数据结构之折半查找
- 数据结构之折半查找
- 数据结构之折半查找表
- 大话数据结构之:折半查找
- 数据结构(c语言版)之顺序表
- 数据结构C语言版之邻接矩阵(遍历)
- 数据结构之单链表(c语言版)
- 数据结构之线性表(C语言版)
- 数据结构之简单排序(C语言版)
- 数据结构算法之--折半查找(二分查找BinarySearch)
- 数据结构(C语言版)
- 数据结构(C语言版)
- 数据结构(C语言版)
- Activity之间传递Bitmap
- linux 消息队列查看和删除
- 数据结构课程设计源代码
- CSS3伪类选择器
- C语言---基础
- 数据结构C语言版之查找(折半选择快速等)
- nginx浅析--1
- windows 7系统封装初级教程
- 数据结构C语言版之排序(各种排序)
- 递归应用----指向整型数据的指针变量对输入的3个整数按从小到大排序
- yum搭建lnmp环境(CentOS6.5)
- 将二叉树按中序遍历转换成双向链表
- gedit写Makefile出现Makefile:16: *** missing separator. Stop
- ImportError: No module named MySQLdb 解决方案