【数据结构】编程实现有序顺序表的顺序查找和二分查找算法。C++版

一、实验目的:
熟悉各种查找算法及其复杂性,能够根据实际情况选择合适的存储结构。
二、实验要求:
算法完善,考虑时间复杂度。
三、实验内容: 
编程实现有序顺序表的顺序查找和二分查找算法。

代码段

#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef int KeyType;

//数据元素类型定义 
typedef struct{
	KeyType key;//数据域 
}ElemType;

//顺序表的定义 
typedef struct{
	ElemType *R;//存储空间基地址 
	int length;//表的当前长度 
}SSTable;

//建立顺序表 
bool CreateList(SSTable &L)
{ int i;
  L.R=new ElemType[MAXSIZE+1]; //分配空间
  if (!L.R)  return false;   
  cout<<"请输入线性表的长度,不能大于"<<MAXSIZE<<':'<<endl; 
  cin>>L.length;
  cout<<"请有顺序的输入表中元素:"<<endl;
  for(i=1;i<=L.length;i++)
     cin>>L.R[i].key;   
}

//打印顺序表 
void print(SSTable L)
{ int i;
  for(i=1;i<=L.length;i++)
     if (i==1)  cout<<'('<<L.R[i].key;  
     else cout<<','<<L.R[i].key;
  cout<<')'<<endl;
}

//顺序查找
int Search_Seq(SSTable S,KeyType key){ 
	int i; 
	S.R[0].key=key;//把关键字放在0位置,若找到要查找的数据,则返回数据的位置,否则返回0 
	for(i=S.length;S.R[i].key!=key;--i);//从后往前找 
	return i;
}

//折半或二分查找 
int Search_Bin(SSTable S,KeyType key){
	int low,high,mid;
	low=1;high=S.length;//置查找区间初值 
	while(low<=high){
	mid=(low+high)/2;
	if(key==S.R[mid].key) return mid;//找到待查元素 
	else if(key<S.R[mid].key) high=mid-1;//继续在前一子表进行查找 
	else low=mid+1;//继续在后一子表进行查找 
    }
    return 0;//表中不存在待查元素 
}
int main(){
	int m,n,x;
	SSTable S;
	CreateList(S); 
	cout<<"您建立的表为:\n"; 
	print(S); 
	cout<<"请按1继续运行程序:"; 
	cin>>x;
	while(x){
	cout<<"请输入要查找的元素:\n";
	cin>>m; 
	cout<<endl; 
	cout<<"通过顺序查找:"<<endl; 
	n=Search_Seq(S,m) ;
	cout<<"数据"<<m<<"在表中的位置为:"<<n<<endl;
	cout<<endl; 
	cout<<"通过二分查找:"<<endl; 
	n=Search_Bin(S,m);
	cout<<"数据"<<m<<"在表中的位置为:"<<n<<endl;
	cout<<endl;
	cout<<"是否继续查找元素?\n";
	cout<<"----是[请输入1]----\n";
	cout<<"----否[请输入0]----\n"; 
	cin>>x; 	
	}
    return 0;
}

实验结果watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yZ5LmL5q6H,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

  • 14
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笙之殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值