码迷,mamicode.com
首页 > 其他好文 > 详细

_DataStructure_C_Impl:在顺序表中查找元素

时间:2015-08-13 06:30:43      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:数据结构

// _DataStructure_C_Impl:Search
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
#define IndexSize 20
typedef int KeyType;
//元素的定义
typedef struct{
	KeyType key;
}DataType;
//顺序表的类型定义
typedef struct{
	DataType list[MaxSize];
	int length;
}SSTable;
//索引表的类型定义
typedef struct{
	KeyType maxkey;
	int index;
}IndexTable[IndexSize];
//在顺序表中查找关键字为x的元素,如果找到返回该元素在表中的位置,否则返回0
int SeqSearch(SSTable S,DataType x){
	int i=0;
	while(i<S.length&&S.list[i].key!=x.key)		//从顺序表的第一个元素开始比较
		i++;
	if(S.list[i].key==x.key)
		return i+1;
	else 
		return 0;
}
int SeqSearch2(SSTable S,DataType x){
	int i=S.length;
	S.list[0].key=x.key;	//监视哨S.list[0]
	while(S.list[i].key>x.key)
		i--;
	return i;
}
//在有序顺序表中折半查找关键字为x的元素,如果找到返回该元素在表中的位置,否则返回0
int BinarySearch(SSTable S,DataType x){
	int low,high,mid;
	low=0;				//设置待查找元素范围的下界和上界
	high=S.length-1;
	while(low<=high){
		mid=(low+high)/2;
		if(S.list[mid].key==x.key)		//如果找到元素,则返回该元素所在的位置
			return mid+1;
		else if(S.list[mid].key<x.key)	//如果mid所指示的元素小于关键字,则修改low指针
			low=mid+1;
		else if(S.list[mid].key>x.key)	//如果mid所指示的元素大于关键字,则修改high指针
			high=mid-1;
	}
	return 0;
}
//在主表S中查找关键字为x的元素,T为索引表。如果找到返回该元素在表中的位置,否则返回0
int SeqIndexSearch(SSTable S,IndexTable T,int m,DataType x){	//分块查找;索引查找
	int i,j,bl;
	for(i=0;i<m;i++)	//通过索引表确定要查找元素所在的单元
		if(T[i].maxkey>=x.key)
			break;
	if(i>m)		//如果要查找的元素不在索引顺序表中,则返回0
		return 0;
	j=T[i].index;	//要查找的元素在的主表的第j单元
	if(i<m-1)		//bl为第j单元的长度
		bl=T[i+1].index-T[i].index;
	else
		bl=S.length-T[i].index;
	while(j<T[i].index+bl)
		if(S.list[j].key==x.key)	//如果找到关键字,则返回该关键字在主表中所在的位置
			return j+1;
		else
			j++;
	return 0;
}
void main(){
	SSTable S1={{123,23,34,6,8,355,32,67},8};
	SSTable S2={{11,23,32,35,39,41,45,67},8};
	SSTable S3={{6,12,23,16,21,26,41,32,37,35,48,46,49,47,52,61,59,76,68,72},20};
	IndexTable T={{23,0},{41,5},{52,10},{76,15}};
	DataType x={32};
	int pos;
	if((pos=SeqSearch(S1,x))!=0)
		printf("顺序表的查找:关键字32在主表中的位置是:%2d\n",pos);
	else
		printf("查找失败!\n");
	if((pos=BinarySearch(S2,x))!=0)
		printf("折半查找:关键字32在主表中的位置是:%2d\n",pos);
	else
		printf("查找失败!\n");
	if((pos=SeqIndexSearch(S3,T,4,x))!=0)
		printf("索引顺序表的查找:关键字32在主表中的位置是:%2d\n",pos);
	else
		printf("查找失败!\n");
	system("pause");
}
技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载|Copyright ©2011-2015,Supernatural, All Rights Reserved.

_DataStructure_C_Impl:在顺序表中查找元素

标签:数据结构

原文地址:http://blog.csdn.net/williamfan21c/article/details/47484519

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!