资源描述
实验五 查找得实现
一、 实验内容
1、建立一个线性表,对表中数据元素存放得先后次序没有任何要求.输入待查数据元素得关键字进行查找。为了简化算法,数据元素只含一个整型关键字字段,数据元素得其余数据部分忽略不考虑.建议采用前哨得作用,以提高查找效率。
2、查找表得存储结构为有序表,输入待查数据元素得关键字利用折半查找方法进行查找.此程序中要求对整型量关键字数据得输入按从小到大排序输入。
二、 源代码与执行结果
1、
#include〈iostream>
using namespace std ;
#define MAX 100
#define KeyType int
typedef struct
{
KeyType key ;
}DataType ;
typedef struct
{
ﻩDataType elem[MAX] ;
int length ;
}SeqTable , *PSeqTable ;
PSeqTable Init_SeqTable()
{
ﻩPSeqTable p = (PSeqTable)malloc(sizeof(SeqTable)) ;
ﻩif(p != NULL)
{
p->length = 0 ;
ﻩreturn p ;
}
ﻩelse
{
ﻩ cout〈<"Out of space!”〈〈endl ;
ﻩ return NULL ;
ﻩ}
}
int insert_SeqTable(PSeqTable p ,KeyType x)
{
if(p->length 〉= MAX)
ﻩ{
ﻩcout〈<”overflow!"<<endl ;
ﻩreturn 0 ;
ﻩ}
p—>elem[p—>length]、key = x ;
p-〉length ++ ;
return 1 ;
}
int SeqSearch(SeqTable s ,KeyType k)
{
ﻩint n , i = 0 ;
ﻩn = s、length ;
s、elem[n]、key = k ;
ﻩwhile(s、elem[i]、key != k)
ﻩﻩi ++ ;
ﻩif(i == n)
return —1 ;
else
ﻩﻩreturn i ;
}
void main()
{
PSeqTable p ;
int i , n ;
ﻩKeyType a ;
p = Init_SeqTable() ;
ﻩcout<〈"请输入数据个数:" ;
cin>>n ;
cout〈<"请输入数据:”<〈endl ;
for(i = 0 ; i < n ; i ++)
ﻩ{
ﻩcin〉>a ;
ﻩ insert_SeqTable(p , a) ;
}
ﻩcout<<"请输入要查找得数据,输入32767结束:” ;
cin〉〉a ;
ﻩwhile(a != 32767)
ﻩ{
i =SeqSearch(*p , a) ;
if(i == -1)
{
ﻩﻩﻩcout<<”无此数据!请重新输入:"<〈endl ;
ﻩ ﻩcin>>a ;
ﻩ}
ﻩﻩelse
ﻩﻩ{
ﻩ cout<〈"该数据得位置就是:"〈<i+1<<endl ;
ﻩ cout〈<"请输入要查找得数据:" ;
ﻩ ﻩcin〉〉a ;
ﻩ }
ﻩ}
}
2、
#include<iostream>
using namespace std ;
#define MAX 100
#define KeyType int
typedef struct
{
KeyType key ;
}DataType ;
typedef struct
{
ﻩDataType elem[MAX] ;
ﻩint length ;
}BinTable , *PBinTable ;
PBinTable Init_BinTable()
{
ﻩPBinTable p = (PBinTable)malloc(sizeof(BinTable)) ;
if(p != NULL)
{
p->length = 0 ;
ﻩﻩreturn p ;
ﻩ}
else
ﻩ{
ﻩcout〈<"Out of space!"〈<endl ;
return NULL ;
ﻩ}
}
int insert_BinTable(PBinTable p ,KeyType x)
{
if(p—〉length >= MAX)
{
ﻩ cout<<"overflow!”<〈endl ;
ﻩ return 0 ;
ﻩ}
ﻩp-〉elem[p—>length]、key = x ;
p->length ++ ;
ﻩreturn 1 ;
}
int BinSearch(BinTable s ,KeyType k)
{
ﻩint low , mid , high ;
ﻩlow = 0 ;
high = s、length-1 ;
while(low <= high)
{
ﻩﻩmid = (low+high)/2 ;
ﻩ if(s、elem[mid]、key == k)
ﻩﻩﻩreturn mid ;
ﻩ else if(s、elem[mid]、key > k)
ﻩﻩ high = mid - 1 ;
ﻩﻩelse
ﻩlow = mid +1 ;
ﻩ}
ﻩreturn —1 ;
}
void main()
{
PBinTable p ;
ﻩint i , n ;
ﻩKeyType a ;
p = Init_BinTable() ;
cout<<”请输入数据个数:” ;
cin〉>n ;
ﻩcout<〈"请按从小到大得顺序输入数据:”〈<endl ;
for(i = 0 ; i 〈 n ; i ++)
ﻩ{
cin>〉a ;
ﻩ insert_BinTable(p , a) ;
}
ﻩcout<<"请输入要查找得数据,输入32767结束:” ;
ﻩcin〉>a ;
while(a != 32767)
{
ﻩi =BinSearch(*p , a) ;
if(i == -1)
ﻩ{
ﻩﻩcout〈〈"无此数据!请重新输入:"〈〈endl ;
cin>>a ;
ﻩ}
ﻩelse
{
ﻩcout<<"该数据得位置就是:”〈<i+1〈<endl ;
ﻩﻩﻩcout<〈”请输入要查找得数据:" ;
cin>〉a ;
}
ﻩ}
}
展开阅读全文