数据结构实验折半查找C语言实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#define overflow -1

#define EQ(a,b) ((a)==(b))

#define LT(a,b) ((a)<(b))

#define LQ(a,b) ((a)<=(b))

//--------------------------折半查找的数据结构------------------------

typedef intKeyType;

typedef struct{

KeyType key;

}ElemType;

typedef struct{

ElemType *elem;

int length;

}SST able;

//---------------------------操作函数-----------------------------------

void InitList(SSTable&ST,KeyType n);//静态查找表的初始化

void createSST able(SST able&ST);//向查找表中输入元素

void print(SST able ST);

intsearch_Seq(SSTableST,KeyType key);

void SortSST able(SSTable&ST);

intSearch_Bin(SSTableST,KeyType key);

//---------------------------算法实现-----------------------------------

////////////////////////////静态查找表的初始化,查找表长度为n/////////////////////////// void InitList(SSTable&ST,int n)

{

ST.elem=(ElemType *)malloc((n+1)*sizeof(KeyType));

if(!ST.elem)

exit(overflow);

ST.length=n;

}

////////////////////////////向查找表中输入元素///////////////////////////

void createSST able(SST able&ST)

{int a;

printf("要向查找表中输入多少元素?\n");

scanf("%d", &a);

printf("向查找表中输入元素\n");

for(inti=1;i<=a;i++)

scanf("%d",&(ST.elem[i].key));

ST.length=a;

}

///////////////////////////显示查找表里的元素//////////////////////////// void print(SST able ST)

{

inti;

printf("查找表中元素是:\n ");

for(i=1;i<=ST.length;i++)

printf("%d ",ST.elem[i].key);

printf("\n");

}

//////////////////////////查找元素key///////////////////////////////////// intsearch_Seq(SSTableST,KeyType key)

{

inti;

ST.elem[0].key=key;

for(i=ST.length;!EQ(ST.elem[i].key,key);--i);

return i;

}

/////////////////////////对查找表元素进行排序///////////////////////////// void SortSST able(SSTable&ST)

{

for(inti=1;i

for(int j=1;j<=ST.length-i;j++)

{

if(ST.elem[j].key>ST.elem[j+1].key)

{

int temp=ST.elem[j].key;

ST.elem[j].key=ST.elem[j+1].key;

ST.elem[j+1].key=temp;

}

}

}

////////////////////////////////折半查找/////////////////////////////// intSearch_Bin(SSTableST,KeyType key)

{

intlow,mid,high;

low=1;

high=ST.length;

while(low<=high)

{

mid=(low+high)/2;

if(EQ(key,ST.elem[mid].key))

return mid;

else if (LT(key,ST.elem[mid].key))

high=mid-1;

else

low=mid+1;

}

return 0;

}

//--------------------------------主函数---------------------------------

void main()

{

SSTable ST;

printf(" 请输入要建立的查找表的长度:");

int n;

scanf("%d",&n);

InitList(ST,n);

printf("\n\n\n 查找表已建立,您可以选择下面您要进行的操作:");

printf("\n**************************************************************************");

printf(" \n 1:向查找表中输入元素2:显示查找表里的元素\n");

printf(" 3:查找元素key 4:对查找表元素进行排序\n");

printf(" 5:排序后进行折半查找6:清屏!选其他任意键结束!\n"); printf("**************************************************************************\n");

inti;

begin:

printf("请输入选项:");

scanf("%d",&i);

printf("\n");

switch(i)

{

case 1: createSSTable(ST);

printf("输入完毕!\n");

goto begin;

case 2:print(ST); printf(""); goto begin;

case 3:printf("请输入你要查找的元素\n");

相关文档
最新文档