考研生活day1--王道课后习题2.2.1、2.2.2、2.2.3

2.2.1

题目描述:

解题思路:

·这是最基础的操作,思路大家应该都有,缺少的应该是如何下笔,很多同学都是有思路但是不知道如何下笔,这时候看思路的意义不大,可以直接看答案怎么写,最好可以直接背下来,等熟悉了代码操作再进行书写也不迟

·言归正传,我们只需要写一个循环找到其中最小元素,以及最小元素所在下标,再用末尾元素对其覆盖即可,最后不要忘记了要对表的长度减一

*基础比较好的同学可以直接看外部的Del_Min函数,而基础一般的同学也可以看我在注释中写的Del_Min函数,注释中是我根据王道书中的答案根据C++语法进行修改的(因为C语言太过严谨且繁琐了)

代码如下

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

void PrintArray(vector<int> v) {
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << '\t';
    }
    cout << endl;
}
/*
void Del_Min(SQList& L, Element e) {
    if (L.length() == 0) {//如果表空则输出error
        cout << "error!" << endl;
        return;//函数结束
    }
    int minn = INT_MAX;//INT_MAX为C++中用法定义minn为int类型所能表达的最大整数
    int pos = 0;//定义一个中间变量用于存放最小数据所在的位置
    for (int i = 0; i < L.length(); i++) {
        if (L[i] < minn) {
            minn = L[i];
            pos = i;
        }
    }
    L[pos] = L[length() - 1];//将最后的数字放在最小的数字的位置上
    L.length--;//千万不要忘记长度减一,这是很容易遗忘的一点
}
*/
void Del_Min(vector<int>& v, int& min_value) {
    if (v.empty()) {//判断表空
        cout << "顺序表为空" << endl;
        return;
    }

    min_value = v[0];
    int min_pos = 0;//定义中间变量确定最小数据所在位置
    for (int i = 1; i < v.size(); i++) {
        if (v[i] < min_value) {
            min_value = v[i];
            min_pos = i;
        }
    }
    v[min_pos] = v[v.size() - 1]; //将最后一个元素填补至最小元素位置
    v.pop_back();//取出数组末尾最后的一个元素,在这里等价于长度减一也就是L.length-1
}



int main()
{
    vector<int> v = { 6,3,4,5,8,9 };
    int min_value;
    PrintArray(v);
    Del_Min(v, min_value);
    cout << "数组最小值为:" << min_value << endl;
    PrintArray(v);
}

运行结果


2.2.2

题目描述

解题思路:

·最基本的思路就是找一个临时变量,将前半部分的变量存入临时变量,再将后半部分变量存入前半部分变量,最后将临时变量中存入后半部分变量中,这样就完成了数据交换,这样说可能有点懵逼,用代码表示就是

cpp 复制代码
temp = L.data[i];
L.data[i] = L.data[length-i-1];
L.data[Length-i-1] = temp;

这个思路一定要会,因为以后一定还会遇到

·在这里我提供一个更好的思路,可以直接调用swap()函数,这样就轻松实现数据交换了

*注释中的为书上答案修改后答案,基本思想未变,可运行代码为我取巧的方法

代码如下:

cpp 复制代码
#include <iostream>
#include <vector>
#include <ctime>

using namespace std;

void Reverse(vector<int> &v) {
	int l = 0, r = v.size() - 1;
	while (l <= r) {
		swap(v[l], v[r]);//交换v[l],v[r]数据
		l++, r--;
	}
}

/*
void Reverse(vector<int>& v) {
	for (int i = 0; i < v.size() / 2; i++) {
		int temp = v[i];
		v[i] = v[v.size() - 1 - i];
		v[v.size() - 1 - i] = temp;
	}
}
*/

void GenerateData(vector<int>& v, int n) {
	srand(time(NULL));

	for (int i = 0; i < n; i++) {
		v.push_back(rand() % 100 + 1);
	}
}

void PrintArray(vector<int> v) {
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << '\t';
	}
	cout << endl;
}

int main() {
	vector<int> v;
	GenerateData(v,10);
	PrintArray(v);
	Reverse(v);
	PrintArray(v);

}

运行结果


2.2.3

题目描述

解题思路

·一开的思路是遍历整个表,如果值相等,那么就将元素删除,再将表前移,但是这样会复杂一些,使用课后答案的思路会更简单,如果遍历到的值不相等,那就继续遍历,相等的值会被自动覆盖掉,就会简单且易懂一些

代码如下:

cpp 复制代码
#include <iostream>
#include <vector>
#include <ctime>

using namespace std;


void Del_x(vector<int>& v, int x) {
	int k = 0;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] != x) {//如果当前的值不等于x,就把他赋值到k位置,然后k++,也就是k的位置后移
			v[k++] = v[i];
		}
	}
	v.erase(v.begin() + k, v.end());//删除k后所有元素
}


void GenerateData(vector<int>& v, int n) {
	srand(time(NULL));

	for (int i = 0; i < n; i++) {
		v.push_back(rand() % 100 + 1);
	}
}

void PrintArray(vector<int> v) {
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << '\t';
	}
	cout << endl;
}

int main() {
	vector<int> v;
	GenerateData(v,10);
	PrintArray(v);
	Del_x(v,2);
	PrintArray(v);

}

运行结果

相关推荐
卡梅德生物科技小能手8 小时前
卡美德生物科普NGF(神经生长因子):神经系统发育与修复的关键调节因子
经验分享·深度学习·生活
我没胡说八道8 小时前
论文排版避坑指南|按问题选工具,不踩坑,选好工具
人工智能·深度学习·考研·计算机视觉·自然语言处理·论文
最新商业模式分享软件开发12 小时前
从“管理”到“服务”:2026物业新规下的“消费返物业费”破局之道
生活·软件开发·小程序开发·物业·私域电商
卡梅德生物科技小能手1 天前
卡美德生物科普MMP9(基质金属蛋白酶9):细胞外基质重塑的关键调节因子
经验分享·深度学习·生活
自由天空线上运营1 天前
本地生活门店差评风控SOP拆解
python·生活
森普智慧农业1 天前
邛崃大梁酒庄:以酒旅融合赋能乡村振兴的示范样板
大数据·科技·生活·旅游
tyqtyq222 天前
药品说明书解读 —— AI 安全用药助手,鸿蒙原生应用深度解析
人工智能·学习·华为·生活·harmonyos
卡梅德生物科技小能手2 天前
卡美德生物科普CSF1(巨噬细胞集落刺激因子1)
经验分享·深度学习·生活
蓝桉(努力版)3 天前
27考研资料合集
考研
fusg18013 天前
不厚重不刺激,复盛公六味地黄酒适合长期饮用的养生酒
生活