基于线性表的哨兵查找和折半查找

Posted Freeloop_嘉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于线性表的哨兵查找和折半查找相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
typedef int KeyType;
#define LIST_SIZE 20
typedef struct RecordType
{
KeyType key;
//OtherType other_data;
}RecordType;


typedef struct RecordList
{
RecordType r[LIST_SIZE+1];
int length;
}RecordList;


void Init(RecordList *l,KeyType k)
{
l->r[0].key=0;
RecordType r[LIST_SIZE+1];
printf("请输入长度:");
scanf("%d",&l->length);
for(int i=1;i<l->length;i++)
{
printf("输入序列中元素:");
scanf("%d",&l->r[i].key);
}
/* for(i=1;i<l.length;i++)
{
printf("初始化的序列为%d\n", l.r[i].key);
}*/
}


//哨兵查找
int SeqSearch(RecordList l,KeyType k)
{
int i;
i=l.length;
while(i>=1&&l.r[i].key!=k)
{
i--;
}
if(i>=1)return i;
else return 0;
}

//折半查找
int BinSearch(RecordList l,KeyType k)
{
int low,mid,high;
low=1;
high=l.length;
printf("请输入要查找的值:");
scanf("%d",&k);
while(low<=high)
{
mid=(low+high)/2;
if(k==l.r[mid].key)
{
return (mid);
}
else if(k<l.r[mid].key)
{
high=mid-1;
}
else low=mid+1;
}
return 0;
}

void main()
{
RecordList l;KeyType k;
int i,result1,result2;
Init(&l,k);
printf("请选择:---1.哨兵查找。2.折半查找。\n");
scanf("%d",&i);
switch(i)
{
case 1:
result1=SeqSearch(l,k);
printf("%d\n",result1);
case 2:
result2=BinSearch(l,k);
printf("%d\n",result2);
default:
printf("Error!");
}
}

 

以上是关于基于线性表的哨兵查找和折半查找的主要内容,如果未能解决你的问题,请参考以下文章

第七章学习小结

顺序查找&折半查找

顺序查找&折半查找

数据结构实验

数据结构实验

数据结构-第七章学习小结