分块查找算法

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

代码:

#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;



}

运行截图:

分块查找算法

你可能感兴趣的:(算法)