分块查找算法

问题:明白思想,其他的没什么,记得结构体为指针时一定要动态分配内存。

代码:

#include <iostream>
#include <cstdlib>

using namespace std;
#define MAXL 20
typedef struct seq
{
	int key[MAXL];
	int len;
}data;

typedef struct table
{
	int start;
	int end;
	int d;
}index[4];

int block_search(index s,data *list,int key)         //分块查找
{
	int i=0;
	int j;
	while(i<4&&key>s[i].d)     //确定块的地址
		i++;
	if(i>=4)
		return -1;

	for(j=s[i].start;j<=s[i].end;j++)
	{
		if(list->key[j]==key)
			return j;
	}
	if(j>s[i].end)
		return -1;

}

int  main()
{
	data *list;
	index s;
	int i,j,p;
	int key;
	cout<<"/"<<"分块查找"<<"/"<<endl;
	cout<<"---------------------"<<endl;
	list=(data *)malloc(sizeof(struct seq));
	if(!list)
		cout<<"allocate fail"<<endl;

	cout<<"input the len:";
	cin>>list->len;
	for(i=0;i<list->len;i++)
	{
		cin>>list->key[i];
	}

	cout<<"output the list:"<<endl;
	for(i=0;i<list->len;i++)
	{
		cout<<list->key[i]<<"  ";
	}
	cout<<endl;
	for(j=0;j<4;j++)
	{
		cin>>s[j].start>>s[j].end>>s[j].d;
	}

	cout<<"please input the key:";
	cin>>key;
	p=block_search(s,list,key);
	if(p==-1)
		cout<<"can not find"<<endl;
	else
		cout<<"the key pos is  "<<p<<endl;
	return 0;

}

运行截图:

原文地址:https://www.cnblogs.com/xshang/p/3081358.html