数据结构--顺序查找和二分查找

前端之家收集整理的这篇文章主要介绍了数据结构--顺序查找和二分查找前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

题目: 顺序查找,在顺序表R[0..n-1]中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1;二分查找,在有序表R[0..n-1]中进行二分查找,成功时返回记录的位置,失败时返回-1。

顺序查找:

#include

#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(ikey[i]!=k)

{

i++;

}

if(i>=n)

return -1;

else

{

printf("%dn",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,x);

if(a==-1) printf("查找失败");

else printf("关键字的位置为:%d",a);

}

二分查找(也叫折半查找)

#include

#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,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,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]:%dn ",++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);

printf("输入顺序表的10个有序数:");

for(i = 0; i < 10; i++)

{

scanf("%d",b);

}

a=BinSearch(&myList,a+1);

}

猜你在找的C#相关文章