您的位置:首页 > 其它

静态表查找和二分法静态表查找

2016-12-18 16:32 190 查看
简单的操作。。不解释

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <map>
#include <sstream>
#include <queue>
#include <stack>
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a));
#define For(a,b) for(int i = a;i<b;i++)
#define LL long long
#define MAX_N 100010
using namespace std;

typedef int ElemType;
typedef struct // 静态表结构体
{
ElemType *elem;
int length;
}SStable;
void Init_Table(SStable *ele) // 静态表的初始化操作
{
ele->elem = (ElemType *)malloc(sizeof(ElemType) * 100);
ele->length = 0;
return ;
}
void Insert_Table(SStable *ele) // 元素插入操作
{
printf("请输入一个整数:\n\n");
int n;
scanf("%d",&n);
cout<<endl<<"请输入"<<n<<"个数作为查找表的数据元素:"<<endl<<endl;
for(int i = 0; i<n; i++)
{
int num;
scanf("%d",&num);
ele->elem[i+1] = num;
ele->length ++;
}
return ;
}

void Sort_Sear_tab(SStable *ele) // 排序函数
{
for(int i = 1; i<=ele->length-1; i++)
{
for(int j = i+1; j<=ele->length; j++)
{
if(ele->elem[i] > ele->elem[j])
{
int temp = ele->elem[i];
ele->elem[i] = ele->elem[j];
ele->elem[j] = temp;
}
}
}
return ;
}
void Print_Table(SStable *ele) // 打印函数
{
for(int i = 1; i<=ele->length; i++)
{
printf("%d ",ele->elem[i]);
}
cout<<endl<<endl;
return ;
}
bool Equal(int num,int num1) // 判定相等的函数
{
return (num == num1);
}
bool Less(int flag,int flag1) // 判定小于的函数
{
return (flag<flag1);
}
int Search_Static(SStable *Sele,int S_num) // 静态表查找
{
int i = Sele->length;
Sele->elem[0] = S_num;
for(i = Sele->length; !Equal(S_num,Sele->elem[i]); i--) ;
return i;
}

int Search_Binary(SStable *Bele,int B_num) // 二分法静态表查找
{
int left = 1,right = Bele->length;
while(left <= right)
{
int mid = (left + right) / 2;
if(Equal(B_num,Bele->elem[mid]))
return mid;
else if(Less(B_num,Bele->elem[mid]))
right = mid - 1;
else left = mid + 1;
}
return 0;
}

int main()
{
SStable head;
Init_Table(&head);
Insert_Table(&head);

cout<<endl<<"该静态查找表中的数据元素是:"<<endl<<endl;
Print_Table(&head);

printf("请输入数据通过静态查找法看其是否在静态查找表中:\n\n");
int num;
scanf("%d",&num);
int pos = Search_Static(&head,num);
if(pos == 0) cout<<endl<<"数据 "<<num<<" 不存在于该静态查找表中。"<<endl<<endl;
else cout<<endl<<"数据 "<<num<<" 在静态查找表中的下标是: "<<pos<<endl<<endl;

Sort_Sear_tab(&head);
printf("通过排序函数得到的有序静态查找表是:\n\n");
Print_Table(&head);

printf("请输入数据通过静态查找法看其是否在有序静态查找表中:\n\n");
int con;
scanf("%d",&con);
int pos1 = Search_Binary(&head,con);
if(pos1 == 0) cout<<endl<<"数据 "<<con<<" 不存在于该静态查找表中。"<<endl<<endl;
else cout<<endl<<"数据 "<<con<<" 在静态查找表中的下标是: "<<pos1<<endl<<endl;

return 0;
}

/*

2016/12/18
Sunday

测试样例:
10

2 5 9 10 6 3 11 7 29 4

3

11

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: