数据结构测试模拟题(2)

发布于:2025-05-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

1、选择排序(输出过程)

#include <iostream>
using namespace std;

int main() {
    int a[11]; // 用a[1]到a[10]来存储输入

    // 读取10个整数
    for(int i = 1; i <= 10; i++) {
        cin >> a[i];
    }

    // 选择排序过程(只需9轮)
    for(int i = 1; i < 10; i++) {
        int min_idx = i;
        // 找出从i到10的最小值的索引
        for(int j = i + 1; j <= 10; j++) {
            if(a[j] < a[min_idx]) {
                min_idx = j;
            }
        }
        // 若最小值不在当前位置i,就进行交换
        if(min_idx != i) {
            swap(a[i], a[min_idx]);
        }
        // 输出当前轮次的排序结果
        cout << "第" << i << "轮比较的结果为";
        for(int j = 1; j <= 10; j++) {
            cout << " " << a[j];
        }
        cout << endl;
    }

    return 0;
}    

2、寻找大富翁

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	vector<int> a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	
	// 降序排序
	sort(a.begin(), a.end(), greater<int>());
	
	// 输出前M个
	for (int i = 0; i < m && i < n; i++) {
		if (i > 0) cout << " ";
		cout << a[i];
	}
	return 0;
}

3、冒泡排序(输出过程)

#include<bits/stdc++.h>
using namespace std;
int a[15];
void maopaopaixu(){
	int n=10;
	for(int i=0;i<n-1;i++){
		bool t=false;
		for(int j=0;j<n-i-1;j++){
			if(a[j]>a[j+1]){
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
				t=true;
			}
		}
		
		cout<<"第"<<i+1<<"轮比较的结果为 ";
		for(int k=0;k<n;k++){
			cout<<a[k]<<" ";
		}
		cout<<endl;
	}
}
int main(){
	for(int i=0;i<10;i++){
		cin>>a[i];
	}
	maopaopaixu();
	return 0;
}

4、求二叉树的叶子结点个数

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
char a[N];
int cnt=0;
string str;
void dfs(int r){
	if(a[2*r]!=-1)dfs(2*r);
	cout<<a[r];
	if(a[2*r]==-1&&a[2*r+1]==-1){
		cnt++;
	}
	if(a[2*r+1]!=-1){
		dfs(2*r+1);
	}
}
int main(){
	cin>>str;
	stack<int>st;
	
	st.push(1);
	
	for(int i=0;i<str.size();i++){
		int p=st.top();
		st.pop();
		
		if(str[i]!='#'){
			a[p]=str[i];
			st.push(2*p+1);
			st.push(2*p);
		}
		else{
			a[p]=-1;
		}
	}
	dfs(1);
	cout<<"\n"<<cnt;
	return 0;
}

5、二叉树非叶子

#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{
	int value;
	int left;
	int right;
}a[N];
int n;
void xianxu(int idx){
	if(idx==0)return;
	cout<<a[idx-1].value<<" ";
	xianxu(a[idx-1].left);
	xianxu(a[idx-1].right);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].value>>a[i].left>>a[i].right;
	}
	
	for(int i=0;i<n;i++){
		if(a[i].left!=0&&a[i].right!=0){
			a[i].value+=1;
		}
	}
	xianxu(1);
	cout<<endl;
	return 0;
}

6、叶子结点加一

#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{
	int value;
	int left;
	int right;
}a[N];
int n;
void xianxu(int idx){
	if(idx==0)return;
	cout<<a[idx-1].value<<" ";
	xianxu(a[idx-1].left);
	xianxu(a[idx-1].right);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].value>>a[i].left>>a[i].right;
	}
	
	for(int i=0;i<n;i++){
		if(a[i].left==0||a[i].right==0){
			a[i].value+=1;
		}
	}
	xianxu(1);
	cout<<endl;
	return 0;
}

7、周末舞会

#include<bits/stdc++.h>
using namespace std;
int main(){
	int boy,girl,k;
	cin>>boy>>girl>>k;
	queue<int>b_q,g_q;
	for(int i=1;i<=boy;i++){
		b_q.push(i);
	}
	for(int i=1;i<=girl;i++){
		g_q.push(i);
	}
	
	while(k--){
		int x,y;
		x=b_q.front();
		b_q.pop();
		y=g_q.front();
		g_q.pop();
		cout<<x<<" "<<y<<"\n";
		
		b_q.push(x),g_q.push(y);
		
		
	}
	return 0;
} 


网站公告

今日签到

点亮在社区的每一天
去签到