线性表的查找操作(线性表的顺序查找、二分查找、分块查找)

内容:

(1)随机产生n个两位整数,构造一个查找表。

(2)输入一个整数,利用顺序查找法在查找表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。

(3)对查找表按递增顺序进行排序。

(4)输入一个整数,利用折半查找法在有序表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。

(5)输入整组数无序,但局部有序的一组整数,建立查找表,输入一个整数,利用分块查找法查找该数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。

代码如下:

#include 
#include 
#include 
#include 

typedef struct table{
	int *elem;
	int length;
}SSTable;

typedef struct search{
	int key;
	int first;
}Search;

void InitTable(SSTable &ST)
{//建立查找表 
	int i,j,n;
	srand(time(0));
	printf("请输入随机生成数的个数:");
	scanf("%d",&n);
	
	ST.elem=(int *)malloc(sizeof(int)*(n+1));

	for(i=1;i<=n;i++)
		ST.elem[i]=rand()%90+10;
	ST.length=n;
}

int _Search(SSTable ST,int key)
{//顺序查找 
	int n,i,j;
	ST.elem[0]=key;
	for(i=ST.length;ST.elem[i]!=key;i--);
	return i;
}

void Display(SSTable ST)
{//显示在屏幕上 
	int i;
	for(i=1;i<=ST.length;i++)
		printf("%d ",ST.elem[i]);
	putchar('\n');
}

void Sort(SSTable &ST,int k)
{//从小到大排序 
	int i,j;
	int temp;
	for(i=k;iST.elem[j])
			{
				temp=ST.elem[i];
				ST.elem[i]=ST.elem[j];
				ST.elem[j]=temp;
			}
		}
	}
	
}
int Search_Bin(SSTable ST,int key)
{//二分查找
	int i,j;
	int left=1,right=ST.length;
	int mid=(left+right)/2;
	
	while(left<=right)
	{
		if(ST.elem[mid]==key)
			return mid;
		if(ST.elem[mid]key)
		{
			right=mid-1;
			mid=(left+right)/2;
		}
	}
	return 0;
}

int Block_Search(SSTable &ST)
{//分块查找 
	Search S[10];
	int i,j,n,m,index,key,temp;
	
	
	printf("请输入分多少块:");
	scanf("%d",&index);
	
	
	for(i=0;i


你可能感兴趣的:(数据结构)