数据结构实验折半查找C语言实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");