数据结构实验四

问题A 折半查找的次数

题目描述
给你一个无重复数的有序序列,如果采用折半查找的方式,对于给定的数,需要比较几次找到,请编程实现。
输入
第一行是N,表示序列中数的个数,序列最长1000,第二行是一个有序序列,第三行是要找的数x。
输出
如果找到x,输出折半比较的次数,否则输出NO。
样例输入
11
5 13 19 21 37 56 64 75 80 88 92
19
样例输出
2

#include <iostream>
using namespace std;
int cnt;
int a[20005];
void search(int x,int a[],int n){
   
	int l=1,r=n;
	while(l<r){
   
		int i=(r+l)/2;
		if(x==a[i]) {
   
			cnt++;
			r=i;
			break;
		}
		else if(x>a[i]){
   
			l=i+1;
			cnt++;
		} 
		else {
   
			r=i-1;
			cnt++;
		}
	}
	if(a[r]==x) cout<<cnt;
	else cout<<"NO";
}
int main(){
   
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	int x;cin>>x;
	search(x,a,n);
	return 0;
}

问题B 二叉搜索树中的查找

题目描述
给你一个数据序列,请构造一个二叉搜索树,然后计算出找到给定数据需比较的次数。
输入
第一行是N,表示序列中数的个数,序列最长1000,第二行是一个数据序列,第三行是要找的数x。
输出
如果找到x,输出比较的次数,没找到则输出NO。
样例输入
5
1 2 3 5 4
5
样例输出
4

#include<bits/stdc++.h>
using namespace std;
struct node{
   
	int val;
	node *l;
	node *r;
};
int ans=0;
int flag=0;
void insert(node * &p,int c){
   
	if(p==NULL){
   
		p=new node;
		p->val=c;
		p->l=NULL;
		p->r=NULL;
	}
	if(c<p->val){
   
		insert(p->l,c);
	}
	if(c>p->val){
   
		insert(p->r,c);
	}
}

void search(node *T,int x){
   
	if(T){
   
		ans++;
		if(T->val==x){
   
			flag=1;
			cout<<ans;
		}else if(x<T->val)
		search(T->l,x)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
山东大学数据结构实验是关于CSDN(中国软件开发者社区)的实验。CSDN是中国最大的开发者社区之一,它为广大的软件开发者提供了开发工程师技术社区、知识库、博客、论坛、下载中心等一系列服务。本实验主要目的是通过使用数据结构,对CSDN的一些功能进行模拟和实现。 在实验中,首先需要实现一个用户类,用于表示CSDN的用户,用户类包括用户ID、用户名、密码等属性。通过用户类的设计,可以模拟CSDN用户的登录注册过程。 其次,需要实现一个帖子类,用于表示CSDN中的帖子,帖子类包括帖子ID、发帖人、发帖时间、标题、内容等属性。通过帖子类的设计,可以模拟CSDN上发布和浏览帖子的过程。 接下来,需要实现一个数据结构,比如链表、组等,来存储所有用户和帖子的信息。通过这个数据结构,可以实现用户注册、登录、发帖、浏览帖子等功能。 最后,需要在主函中模拟用户的使用场景,通过调用不同的函来完成用户的登录、注册、发帖、浏览帖子等操作,并打印输出相应的结果。通过这个实验,可以加深对数据结构的理解,同时也可以加深对CSDN功能的认识。 总之,山东大学数据结构实验通过模拟CSDN的一些功能,来帮助学生掌握数据结构的应用。这个实验可以巩固学生在数据结构方面的理论知识,同时也可以增强他们的动手能力和实践能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值