- 题目: 顺序查找,在顺序表R[0..n-1]中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1;二分查找,在有序表R[0..n-1]中进行二分查找,成功时返回记录的位置,失败时返回-1。
- 顺序查找:
#include <stdio.h>
#define MaxSize 100
typedef int DataType;
typedef struct
{
DataType key[MaxSize];
int size;
} SeqList;
void ListInitiate(SeqList *L)/*初始化顺序表L*/
{
L->size = 0;/*定义初始数据元素个数*/
}
int ListLength(SeqList L)/*返回顺序表L的当前数据元素个数*/
{
return L.size;
}
int ListInsert(SeqList *L, int i, DataType x)
/*在顺序表L的位置i(0 ≤ i ≤ size)前插入数据元素值x*/
/*插入成功返回1,插入失败返回0*/
{
int j;
if(L->size >= MaxSize)
{
printf("顺序表已满无法插入! \n");
return 0;
}
else if(i < 0 || i > L->size )
{
printf("参数i不合法! \n");
return 0;
}
else
{
for(j = L->size; j >= i; j--) L->key[j+1] = L->key[j];/*为插入做准备*/
L->key[i] = x;/*插入*/
L->size ++;/*元素个数加1*/
return 1;
}
}
int SeqSearch(SeqList *R,int n,DataType k)//查找K,返回k的位置
{
int i=0;
while(i<n&&R->key[i]!=k)
{
i++;
}
if(i>=n)
return -1;
else
{
printf("%d\n",R->key[i]);
return i;
}
}
void main(void)
{ SeqList myList;
int i , x,a,b;
ListInitiate(&myList);
printf("输入查找数:\n");
scanf("%d",&x);
printf("输入顺序表的5个数:");
for(i = 0; i < 5; i++)
{
scanf("%d",&b);
ListInsert(&myList, i, b);
}
a=SeqSearch(&myList,i,x);
if(a==-1) printf("查找失败");
else printf("关键字的位置为:%d",a);
}
![](https://i-blog.csdnimg.cn/blog_migrate/9f1ea212f8199b820afeb770b10124c3.png)
#include <stdio.h>
#define MaxSize 100
typedef int DataType;
typedef struct
{
DataType key[MaxSize];
int size;
} SeqList;
void ListInitiate(SeqList *L)/*初始化顺序表L*/
{
L->size = 0;/*定义初始数据元素个数*/
}
int ListLength(SeqList L)/*返回顺序表L的当前数据元素个数*/
{
return L.size;
}
int ListInsert(SeqList *L, int i, DataType x)
/*在顺序表L的位置i(0 ≤ i ≤ size)前插入数据元素值x*/
/*插入成功返回1,插入失败返回0*/
{
int j;
if(L->size >= MaxSize)
{
printf("顺序表已满无法插入! \n");
return 0;
}
else if(i < 0 || i > L->size )
{
printf("参数i不合法! \n");
return 0;
}
else
{
for(j = L->size; j >= i; j--) L->key[j+1] = L->key[j];/*为插入做准备*/
L->key[i] = x;/*插入*/
L->size ++;/*元素个数加1*/
return 1;
}
}
int BinSearch(SeqList *R,int n,DataType k)//查找K,返回k的位置
{
int low=0,high=n-1,mid,count=0;
while(low<=high)
{
mid=(low+high)/2;
printf("第%d次查找:在[ %d ,%d]中找到元素R[%d]:%d\n ",++count,low+1,high+1,mid+1,R->key[mid]);
if(R->key[mid]==k) return mid;
if(R->key[mid]>k) high=mid-1;
else low=mid+1;
}
return -1;
}
void main(void)
{ SeqList myList;
int i , x,a,b;
ListInitiate(&myList);
printf("输入查找数:\n");
scanf("%d",&x);
printf("输入顺序表的10个有序数:");
for(i = 0; i < 10; i++)
{
scanf("%d",&b);
ListInsert(&myList, i, b);
}
a=BinSearch(&myList,i,x);
if(a==-1) printf("查找失败");
else printf("关键字的位置为:%d",a+1);
}
![](https://i-blog.csdnimg.cn/blog_migrate/f92376983df4218be88fb716d12088e7.png)