顺序表应用6:有序顺序表查询
2016-07-29 19:20
363 查看
这道题的算法思想就是利用二分查找来缩短查找的时间。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LISTSIZE 20000
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int Initialist(Sqlist *L){
L->elem=(int *)malloc(LISTSIZE*sizeof(Sqlist));
if (!L->elem) exit(-1);
L->length=0;
L->listsize=LISTSIZE;
return 1;
}
int Insertlist(Sqlist *L,int i,int e){
if (i<1||i>L->length+1) printf("ERROR");
int *q=&(L->elem[i-1]);
int *p;
for (p=&(L->elem[L->length-1]);p>=q;p--){
*(p+1)=*p;
}
*q=e;
L->length++;
return 1;
}
int Querylist(Sqlist *A,int length,int a){/*利用二分查找进行比较*/
int i=0,j=length-1,mid;
while (i<=j){
mid=(i+j)/2;
if (a<A->elem[mid])
j=mid-1;
else if(a>A->elem[mid])
i=mid+1;
else if (a==A->elem[mid])
return (mid+1);
}
return -1;
}
int main(){
int i,j,n,m,d,k;
Sqlist A;
Initialist(&A);
Sqlist B;
Initialist(&B);
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%d",&d);
Insertlist(&A,i,d);
}
scanf("%d",&m);
for (i=1;i<=m;i++){
scanf("%d",&d);
Insertlist(&B,i,d);
}
for (i=0;i<B.length;i++){
k=Querylist(&A,A.length,B.elem[i]);
if (k==-1){
if (i==B.length-1)
printf("No Found!");
else
printf("No Found!\n");
}
else{
if(i==B.length-1)
printf("%d",k);
else
printf("%d\n",k);
}
}
return 0;
}
相关文章推荐
- 常见的运行时异常
- NVIDIA GPU的Compute Capability一览
- 一看就懂的ReactJs入门教程(精华版)
- 【HDU】1160 - FatMouse's Speed(dp & 栈)
- POJ3061-Subsequence
- 一个不成熟的编程员,写写 js 的面向对象
- word文档中查找和替换空格符和回车符
- 二、抽象工厂模式Abstract Factory(创建型)
- ios 设置字体家族
- C++11:基于std::queue和std::mutex构建一个线程安全的队列
- 华为在线训练(5)
- 图片轮番
- Codeforces 204B Little Elephant and Cards
- 淘宝放大镜效果
- Linux下使用Vi时方向键变乱码、删除键不能使用的解决方法(亲测有效)
- hive创建表失败,drop表失败
- HDU 1517 A Multiplication Game(博弈)
- Find a way<hdoj2612>
- 趣味100道C语言编程题
- Selenium2学习笔记二