数据结构实验五 查找的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五查找得实现
一、实验内容
1、建立一个线性表,对表中数据元素存放得先后次序没有任何要求.输入待查数据元素得关键字进行查找。为了简化算法,数据元素只含一个整型关键字字段,数据元素得其余数据部分忽略不考虑.建议采用前哨得作用,以提高查找效率。
2、查找表得存储结构为有序表,输入待查数据元素得关键字利用折半查找方法进行查找.此程序中要求对整型量关键字数据得输入按从小到大排序输入。二、源代码与执行结果
1、
#include〈iostream>
using namespace std;
#define MAX 100
#defineKeyType int
typedef struct
{
KeyType key ;
}DataType;
typedef struct
{
ﻩDataTypeelem[MAX];
intlength ;
}SeqTable ,*PSeqTable ;
PSeqTable Init_SeqTable()
{
ﻩPSeqTable p =(PSeqTable)malloc(sizeof(SeqTable)) ;
ﻩif(p !=NULL)
{
p->length= 0 ;
ﻩreturnp;
}
ﻩelse
{
ﻩcout〈<"Outof space!”〈〈endl ;
ﻩreturn NULL;
ﻩ}
}
int insert_SeqTable(PSeqTable p,KeyType x)
{
if(p->length〉= MAX)
ﻩ{
ﻩcout〈<”overflow!"< ﻩreturn 0 ; ﻩ} p—>elem[p—>length]、key=x ; p-〉length++; return1 ; } intSeqSearch(SeqTable s ,KeyTypek) { ﻩ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 ; } voidmain() { PSeqTable p; inti, 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<〈"该数据得位置就是:"〈 ﻩﻩcin〉〉a; ﻩ} ﻩ} } 2、 #include usingnamespace std; #define MAX 100 #define KeyType int typedef struct { KeyType key ; }DataType; typedefstruct { ﻩDataType elem[MAX] ; ﻩintlength ; }BinTable ,*PBinTable ; PBinTableInit_BinTable() { ﻩPBinTable p = (PBinTable)malloc(sizeof(BinTable)) ; if(p != NULL) { p->length= 0; ﻩﻩreturn p ; ﻩ} else ﻩ{ ﻩcout〈<"Out ofspace!"〈<endl ; returnNULL ; ﻩ} } 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) ﻩﻩﻩreturnmid; ﻩelse if(s、elem[mid]、key >k) ﻩﻩhigh=mid-1 ; ﻩﻩelse ﻩlow = mid +1 ; ﻩ} ﻩreturn —1; } voidmain() { PBinTablep ; ﻩinti,n ; ﻩKeyType a; p =Init_BinTable(); cout<<”请输入数据个数:”; cin〉>n; ﻩcout<〈"请按从小到大得顺序输入数据:”〈<endl; for(i = 0 ;i〈n; i ++) ﻩ{ cin>〉a;