数据结构02:线性表 顺序表习题01[C++]

图源:文心一言

考研笔记整理~🥝🥝

之前的博文链接在此:数据结构02:线性表[顺序表+链表]_线性链表-CSDN博客~🥝🥝

本篇作为线性表的代码补充,供小伙伴们参考~🥝🥝

  • 第1版:王道书的课后习题~🧩🧩

编辑:梅头脑🌸

参考用书:王道考研《2025年 数据结构考研复习指导》


目录

🧵01 删除顺序表最小值

🧩题目

🌰解题

🧵02 逆置顺序表

🧩题目

🌰解题 

🧵03 删除指定元素01

🧩题目

🌰解法

🧵04 删除指定元素02

🧩题目

🌰解题 

🧵05-1 有序表删除重复元素

🧩题目

🌰解法

🧵05-2 无序表删除重复元素

🧩题目

🌰解法

🧵06 两个有序表合成一个有序表

🧩题目

🌰解法

🧵07 顺序表位置互换

🧩题目

🌰解法

🧵08 顺序表查找元素

🧩题目

🌰解法

🧵09 输出3个序列中相同的元素

🧩题目

🌰解法

🔚结语


🧵01 删除顺序表最小值

🧩题目

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

🌰解题

📇解题思路

  • 遍历数组,记录数组的最小值 min 与 下标 index;
  • 按照题意,用最末尾的数组替换最小数字;
  • 数组长度 L.length - 1;

⌨️解题代码

#include <iostream>
using namespace std;

#define Maxsize 20
typedef struct {
	int data[Maxsize];
	int length;
}SqList;

bool DeleteMin(SqList& L) {
	if (L.length == 0) return false;

	int min = INT_MAX;
	int index = INT_MAX;
	int i;

	for (i = 0; i < L.length; i++) {
		if (L.data[i] <= min) {
			min = L.data[i];
			index = i;
		}
	}

	L.data[index] = L.data[L.length - 1];
	L.length--;

	return true;
}

int main() {
	SqList L = { { 8, 9, 3, 4, 5, 1, 6, 7, 0, 2 },10 };

	bool result = DeleteMin(L);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
 
  return 0; 
}


🧵02 逆置顺序表

🧩题目

设计一个高效算法,将顺序表工的所有元素逆置,要求算法的空间复杂度为 O(1)。

🌰解题 

📇解题思路

  • 使用指针 i 遍历数组,交换第 i 位和第 length - 1 - i位,循环length / 2次以后得到结果~

⌨️解题代码

#include <iostream>
using namespace std;

#define Maxsize 20
typedef struct {
	int data[Maxsize];
	int length;
}SqList;

bool Reverse(SqList& L) {
	if (L.length == 0) return false;
	if (L.length == 1) return true;

	int temp = 0;
	for (int i = 0; i < L.length / 2; i++) {
		temp = L.data[i];
		L.data[i] = L.data[L.length - 1 - i];
		L.data[L.length - 1 - i] = temp;
	}

	return true;
}

int main() {
	SqList L = { { 8, 9, 3, 4, 5, 1, 6, 7, 0, 2 }, 10 };

	Reverse(L);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
 
  return 0; 
}


🧵03 删除指定元素01

🧩题目

对长度为n的顺序表L,编写一个时间复杂度为 0(n)、空间复杂度为 O(1)的算法,该算法删除顺序表中所有值为x的数据元素。

🌰解法

📇算法思路

  • 遍历数组:
    •  如果指针 i 遍历到的当前元素 != x,则count + 1,该元素 向前移动 count 位;
    • 如果指针 i 遍历到的当前元素 == x,跳过这个元素,开始比较下一个元素;
  • 遍历完成以后,末尾count位元素直接移除,原地完成数组复制~

⌨️算法代码

#include <iostream>
using namespace std;

#define Maxsize 20
typedef struct {
	int data[Maxsize];
	int length;
}SqList;

bool Delete_X(SqList& L, int x) {
	if (L.length == 0) return false;

	int count = 0;
	for (int i = 0; i < L.length; i++) {
		L.data[i - count] = L.data[i];
		if (L.data[i] == x) {
			count++;
		}
	}
	L.length = L.length - count;

	return true;
}

int main() {
	SqList L = { { 8, 2, 3, 4, 2, 1, 6, 2, 0, 2 },10 };
	int x = 2;

	Delete_X(L, x);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
 
  return 0; 
}


🧵04 删除指定元素02

🧩题目

从顺序表中删除其值在给定值s和t之间(包含s和t,要求s<t)的所有元素,若s或t 不合理或顺序表为空,则显示出错信息并退出运行。

🌰解题 

📇解题思路

  • 遍历数组:
    • 如果指针 i 遍历到的当前元素 >t 或 <s,则k + 1,该元素 向前移动 k 位;
    • 如果指针 i 遍历到的当前元素 <= t 且 >=s,跳过这个元素,开始比较下一个元素;
  • 遍历完成以后,将k的长度赋值给 L.length,原地完成数组复制;
  • 备注:
    • 没错,与上一道题目的算法思路是完全一致的~
    • 以下2种代码都可以运行,没有实质性的差别,相对来说,代码1要略好一些~

⌨️算法代码1

#include <iostream>  
#include <climits> // INT_MAX    
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

bool Delete_s_to_t(SqList& L, int s, int t) {
	if (L.length == 0 || s > t) return false;

	int k = 0; // 用于记录需要保留的元素的位置  
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] < s || L.data[i] > t) { // 如果当前元素不在范围[s, t]内,则保留该元素  
			L.data[k++] = L.data[i]; // 将该元素移动到前面空出的位置上,并更新k的值  
		}
	}
	L.length = k; // 更新顺序表的长度  

	return true;
}

int main() {
	SqList L = { {8, 2, 3, 4, 2, 1, 6, 2, 0, 2}, 10 }; // 使用初始化列表来设置数组的元素和长度,注意这里使用了双大括号来初始化结构体中的数组和长度两个成员变量  
	int s = 3, t = 6;

	Delete_s_to_t(L, s, t);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
	return 0;
}

⌨️算法代码2 

bool Delete_s_to_t(SqList& L, int s, int t) {
	if (L.length == 0 || s > t) return false;

	int count = 0;
	for (int i = 0; i < L.length; i++) {
		L.data[i - count] = L.data[i];
		if (L.data[i] >= s && L.data[i] <= t) {
			count++;
		}
	}
	L.length = L.length - count;

	return true;
}


🧵05-1 有序表删除重复元素

🧩题目

从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。

🌰解法

📇算法思路

  • 遍历数组:
    • 如果指针 i 遍历到的当前元素 == 上一个数字,则k + 1,该元素 向前移动 k 位;
    • 如果指针 i 遍历到的当前元素 != 上一个数字,跳过这个元素,开始比较下一个元素;
  • 遍历完成以后,将k的长度赋值给 L.length,原地完成数组复制;
  • 备注:没错,与上一道题目的算法思路是完全一致的~

⌨️算法代码

#include <iostream>   
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

bool DeleteSame(SqList& L) {
	if (L.length == 0) return false;
	if (L.length == 1) return true;

	int k = 1;
	for (int i = 1; i < L.length; i++) {
		if (L.data[i] != L.data[i - 1]) {
			L.data[k++] = L.data[i];
		}
	}
	L.length = k; // 更新顺序表的长度  

	return true;
}

int main() {
	SqList L = { {0, 0, 1, 1, 1, 2, 2, 3, 3, 4 }, 10 };

	DeleteSame(L);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
	return 0;
}

 

🧵05-2 无序表删除重复元素

🧩题目

从无序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。

🌰解法

📇算法思路1

  • 排序;
  • 然后遍历数组:
    • 如果指针 i 遍历到的当前元素 == 上一个数字,则k + 1,该元素 向前移动 k 位;
    • 如果指针 i 遍历到的当前元素 != 上一个数字,跳过这个元素,开始比较下一个元素;
  • 遍历完成以后,将k的长度赋值给 L.length,原地完成数组复制;
  • 备注:没错,与上一道题目的算法思路是完全一致的~

⌨️算法代码1

#include <iostream>     
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

bool DeleteSame(SqList& L) {
	if (L.length == 0) return false;
	if (L.length == 1) return true;

	int temp, i, j;
	for (i = 1; i < L.length; i++) {
		if (L.data[i] < L.data[i - 1]) {
			temp = L.data[i];
			for (j = i - 1; j >= 0 && temp < L.data[j]; j--) {
				L.data[j + 1] = L.data[j];
			}
			L.data[j + 1] = temp;
			i = j + 1;
		}
	}

	int m = 0;
	for (int n = 0; n < L.length; n++) {
		if (n == 0 || L.data[n] != L.data[n - 1]) {
			L.data[m++] = L.data[n];
		}
	}
	L.length = m; // 更新顺序表的长度  

	return true;
}

int main() {
	SqList L = { {1, 1, 0, 0, 1, 2, 3, 4, 2, 3 }, 10 };

	DeleteSame(L);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
	return 0;
}

中间增加了一段简单选择排序算法,就是int i, j, temp之后的for循环(emm...之后有机会详细说这是什么情况,但简单来说,它会从第2个元素开始,与前面的所有元素比较,如果小于则往前移动,直到表中所有元素有序为止)~

如果实在想不起来排序算法怎么办...emm,也可以用这个平替...

sort(L.data, L.data + L.length);

📇算法思路2

  • 哈希表,首先遍历数组所有的元素,存入哈希表;哈希表的首列会记录元素,次列会记录该元素的输出次数;
  • 然后,输出哈比表的首列元素至L.data中,并更新顺序表的长度~

⌨️算法代码2

// 哈希表法

#include <iostream>     
#include <unordered_map>  
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

bool DeleteSame(SqList& L) {
	if (L.length == 0) return false;
	if (L.length == 1) return true;
	unordered_map<int, int> nums;

	for (int i = 0; i < L.length; i++) {
		nums[L.data[i]]++;
	}
	int j = 0;
	for (auto it = nums.begin(); it != nums.end(); ++it) {
		L.data[j++] = it->first;
	}
	L.length = nums.size(); // 更新顺序表的长度  

	return true;
}

int main() {
	SqList L = { {1, 1, 0, 0, 1, 2, 3, 4, 2, 3 }, 10 };

	DeleteSame(L);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
	return 0;
}


🧵06 两个有序表合成一个有序表

🧩题目

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。

🌰解法

📇算法思路

  • 遍历数组,使用 i指针 遍历S1,使用 j指针 遍历S2;
    • 如果 S1.data[i] <= S2.data[j],将S1.data[i]记入S3.data[k],i 往后移动1位;
    • 反之,将S2.data[j]记入S3.data[k],j 往后移动1位;
  • 如果指针 i、j 其中之一遍历到末尾,停止循环,把另一个数组的末尾搬到S3的末尾;

⌨️算法代码

#include <iostream>     
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

bool Merge(SqList& L1, SqList& L2, SqList& L3) {
	if (L1.length + L2.length > L3.length) return false;

	int i = 0, j = 0, k = 0;
	while (i < L1.length && j < L2.length) {
		if (L1.data[i] <= L2.data[j]) {
			L3.data[k++] = L1.data[i++];
		}
		else {
			L3.data[k++] = L2.data[j++];
		}
	}

	while (i < L1.length) {
		L3.data[k++] = L1.data[i++];
	}
	while (j < L2.length) {
		L3.data[k++] = L2.data[j++];
	}
	L3.length = k;

	return true;
}

int main() {
	SqList L1 = { {0, 3, 4, 6, 7, 13, 15, 17, 18, 19 }, 10 };
	SqList L2 = { {1, 2, 5, 8, 9, 10, 11, 12, 14, 16 }, 10 };
	SqList L3 = { {}, 20 };

	Merge(L1, L2, L3);

	for (int i = 0; i < L3.length; i++) {
		cout << L3.data[i] << " ";
	}
	cout << endl;
	return 0;
}


🧵07 顺序表位置互换

🧩题目

已知在一维数组 A[m+n]中依次存放两个线性表(a1,a2,a3,…,am)和(b1,b2,b3,…,bn)。编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,…,bn)放在(a1,a2,a3,…,am)的前面。

🌰解法

📇算法思路

  • 算法思想:
    • 将数组p(n-p)转化为数组(n-p)p,(n-p)p=(p-1(n-p)-1)-1;
    • 因此分别反转前p项,后n-p项,最后整体反转p-1(n-p)-1;
    • reverse函数用于反转数组中指定范围的元素,它通过交换两端的元素来实现反转。
  • 时间复杂度:O(n),其中n是数组的长度,因为需要反转数组的两部分和整体数组。
  • 空间复杂度:O(1),因为算法只使用了固定的额外空间来存储一些临时变量,与数组的长度无关。
  • 备注:题目解法与10年真题是一样的,在下一篇博文中提供了具体的演算流程。

⌨️算法代码

#include <iostream>     
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

void Swap(int& a, int& b) {
	int temp;
	temp = a;
	a = b;
	b = temp;
}

bool Exchange(SqList& L, int m, int n) {
	if (L.length == 0 or L.length == 1) return true;
	if (m + n != L.length) return false;

	int i = 0, j = 0, k = 0;
	while (i < m / 2) {
		Swap(L.data[i], L.data[m - 1 - i]);
		i++;
	}
	while (j < n / 2) {
		Swap(L.data[m + j], L.data[m + n - 1 - j]);
		j++;
	}
	while (k < (m + n) / 2) {
		Swap(L.data[k], L.data[m + n - 1 - k]);
		k++;
	}

	return true;
}

int main() {
	SqList L = { {0, 3, 4, 6, 7, 13, 15, 17, 18, 19 }, 10 };
	// int m = 6, n = 4;
	int m = 5, n = 5;

	Exchange(L, m, n);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
	return 0;
}


🧵08 顺序表查找元素

🧩题目

线性表(ai, a2, a3,…,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法。完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换;若找不到,则将其插入表中并使表中元素仍递增有序,

🌰解法

📇算法思路

  • 最少时间就是提示使用折半查找:如果数组中间的元素大于指定元素,则查找数组的前一半,否则,查找数组的后一半;
  • if 找到元素,交换两个元素;
  • else,定位的当前位置,元素全部后移一个位置(注意是从倒数第一个元素起,每次向后移动一位),空出当前的位置,插入元素~

⌨️算法代码

#include <iostream>     
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

void Swap(int& a, int& b) {
	int temp;
	temp = a;
	a = b;
	b = temp;
}

void Insert(SqList& L, int locate, int target) {
	for (int i = L.length - 1; i > locate; i--) {
		L.data[i] = L.data[i - 1];
	}
	L.data[locate] = target;
}

bool Locate(SqList& L, int target) {
	if (L.length == 0) return true;

	int front = 0, back = L.length - 1, mid = (front + back) / 2;
	while (L.data[mid] != target && front <= back) {
		mid = (front + back) / 2;
		if (target < L.data[mid]) {
			back = mid - 1;
		}
		else {
			front = mid + 1;
		}
	}

	if (L.data[mid] == target) {
		if (mid < L.length - 1) {
			Swap(L.data[mid], L.data[mid + 1]);
		}
	}
	else {
		if (target < L.data[mid]) {
			Insert(L, mid, target);
		}
		else {
			Insert(L, mid + 1, target);
		}
	}

	return true;
}

int main() {
	SqList L = { {0, 3, 4, 6, 7, 13, 15, 17, 18, 19 }, 10 };
	// int m = 6;
	int m = 5;

	Locate(L, m);

	for (int i = 0; i < L.length; i++) {
		cout << L.data[i] << " ";
	}
	cout << endl;
	return 0;
}


🧵09 输出3个序列中相同的元素

🧩题目

给定三个序列 A、B、C,长度均为n,且均为无重复元素的递增序列,请设计一个时间09.上尽可能高效的算法,逐行输出同时存在于这三个序列中的所有元素。例如,数组A为{1,2,3},数组B为{2,3,4},数组C为{-1,0,2},则输出 2。要求:
1)给出算法的基本设计思想。
2)根据设计思想,采用C或 C++语言描述算法,关键之处给出注释,3)说明你的算法的时间复杂度和空间复杂度。

🌰解法

📇算法思路

  • 算法思想:
    • 指针 i, j, k从前向后遍历,每次寻找都会使指针向数组中最大的元素对齐,直至3个数字完全相同为止;
    • 这道题目的解题思路与20年的真题非常地像,在本系列下一篇博文会写到~
  • 时间复杂度:O(L1 + L2 + L3);
  • 空间复杂度:O(1)。

⌨️算法代码

#include <iostream>     
using namespace std;

#define Maxsize 20  
typedef struct {
	int data[Maxsize];
	int length;
} SqList;

bool FindCommon(SqList& L1, SqList& L2, SqList& L3) {
	if (L1.length == 0 || L2.length == 0 || L3.length == 0) return false;

	int i = 0, j = 0, k = 0;
	int maxnum = max(L1.data[i], max(L2.data[j], L3.data[k]));

	while (i < L1.length && j < L2.length && k < L3.length) {
		if (L1.data[i] != maxnum || L2.data[j] != maxnum || L3.data[k] != maxnum) {
			if (L1.data[i] < maxnum) { i++; }
			if (L2.data[j] < maxnum) { j++; }
			if (L3.data[k] < maxnum) { k++; }
			maxnum = max(L1.data[i], max(L2.data[j], L3.data[k]));
		}
		else {
			cout << "i = " << i << ",j = " << j << ",k = " << k << ",num = " << maxnum << endl;
			i++; j++; k++;
		}
	}

	return true;
}

int main() {
	SqList L1 = { {1, 2, 3}, 3 };
	SqList L2 = { {2, 3, 4}, 3 };
	SqList L3 = { {-1, 0, 2}, 3 };

	FindCommon(L1, L2, L3);

	return 0;
}


🔚结语

博文到此结束,写得模糊或者有误之处,欢迎小伙伴留言讨论与批评,督促博主优化内容{例如有错误、难理解、不简洁、缺功能}等,博主会顶锅前来修改~😶‍🌫️

我是梅头脑,本片博文若有帮助,欢迎小伙伴动动可爱的小手默默给个赞支持一下,收到点赞的话,博主肝文的动力++~🌟🌟

同系列的博文:🌸数据结构_梅头脑_的博客-CSDN博客

同博主的博文:🌸随笔03 笔记整理-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/453979.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(C语言)strcat函数详解与模拟实现与strncat函数详解

目录 1. strcat函数详解 1. strcat函数模拟实现 3. strcat函数的危险性 4. strncat函数详解 4.1 strncat函数的特殊情况验证 1. strcat函数详解 头文件<string.h> 该函数是用来对字符串末尾追加字符串的&#xff0c;有两个参数&#xff0c;destination是要被追加的字…

LVS 负载均衡-DR模式

一 . DR 模式 直接路由 &#xff1a; 1.介绍&#xff1a; 直接路由&#xff08;Direct Routing&#xff09;&#xff1a;简称 DR 模式&#xff0c;采用半开放式的网络结构&#xff0c;与 TUN 模式的结构类似&#xff0c;但各节点并不是分散在各地&#xff0c;而是与调度器位…

基于SpringBoot+MYSQL的旅游网站

目录 1、前言介绍 2、主要技术 3、系统流程分析 1、登录流程图如下&#xff1a; 2、管理员后台管理流程图如下&#xff1a; 3. 修改密码流程图如下&#xff1a; 4、系统设计 4.1、系统结构设计 4.2 数据库概述 4.2.1 数据库概念设计 4.2.2 数据库逻辑设计 5、运行截…

alibabacloud学习笔记08(小滴课堂)

讲解JDK⼀些基础知识科普 介绍什么是微服务的网关和应用场景 介绍网关SpringCloud Gateway 创建SpringCloud网关项目和依赖添加 1.添加依赖&#xff1a; 2.创建启动类&#xff1a; 3.配置配置文件&#xff1a; 启动验证&#xff1a; 启动网关以及对应的订单服务&#xff1a; …

一个简单的微信小程序表单提交样式模板

没什么东西&#xff0c;只是方便自己直接复制使用 .wxml <view class"box"><form bindsubmit"formSubmit"><view class"form-item"><text class"head">姓名&#xff1a;</text><input class"…

luatos框架中LVGL如何使用中文字体〈二〉编写脚本设置中文字体

本节内容&#xff0c;将和大家一同学习&#xff0c;在luatos环境中&#xff0c;使用lvgl库&#xff0c;一步步的编译固件、编写脚本&#xff0c;最终实现中文字体的显示。 芯片&#xff1a;AIR101 LCD屏&#xff1a;ST7789 上一节&#xff0c;我们一同学习了&#xff0c;硬件引…

GDPU 竞赛技能实践 天码行空3

1. 五星填数 &#x1f496; 源代码 public class Main {static int[] nums new int[11];static boolean[] used new boolean[13];static long ans 0;static{used[7] true;used[11] true;}public static void main(String[] args){dfs(1);System.out.println(ans / 10);//…

缓存的使用

文章目录 1.为什么要有缓存&#xff1f;2.缓存使用场景3.缓存分类4.缓存使用模式5.淘汰策略6.缓存的崩溃与修复7.缓存最佳实践参考文献 1.为什么要有缓存&#xff1f; 数据访问具有局部性&#xff0c;符合二八定律&#xff1a;80% 的数据访问集中在 20% 的数据上&#xff0c;这…

React 的入门介绍

React 是什么 React是一个用于构建用户界面的JavaScript库。它由Facebook开发&#xff0c;并于2013年首次发布。React将用户界面拆分为小的可重用组件&#xff0c;每个组件都有自己的状态&#xff0c;并根据状态的变化来更新界面。 React使用了虚拟DOM&#xff08;Virtual DO…

人工智能迷惑行为大赏——需求与科技的较量

目录 前言 一、 机器行为学 二、人工智能迷惑行为的现象 三、产生迷惑行为的技术原因 四、社会影响分析 五、解决措施 总结 前言 随着ChatGPT热度的攀升&#xff0c;越来越多的公司也相继推出了自己的AI大模型&#xff0c;如文心一言、通义千问等。各大应用也开始内置…

Python 数据持久层ORM框架 SQLAlchemy模块

文章目录 ORM 框架SQLAlchemy 简介SQLAlchemy 作用SQLAlchemy 原理SQLAlchemy 使用流程数据库驱动配置关系型数据库配置NoSQL数据库配置 创建引擎(Engine)定义模型类(ORM)创建会话(Session)创建数据库表其他关键字参数&#xff0c;这些参数将传递给底层的 DDL 创建函数。 删除数…

cmake的一个简单通用模板

文件的tree结构如下所示 在build目录下执行cmake&#xff1a; cmake ../ //生成makefile make //编译 若想清理cmake产生的文件&#xff0c;直接删掉build rm -r build 顶层 CMakeLists.txt cmake_minimum_required(VERSION 3.5) // 限制版本号&#xff0c;因…

nginx实时流量拷贝ngx_http_mirror_module

参考&#xff1a; Module ngx_http_mirror_module Nginx流量拷贝ngx_http_mirror_module模块使用方法详解 ngx_http_mirror_module用于实时流量拷贝 请求一个接口&#xff0c;想实时拷贝这个请求转发到自己的服务上&#xff0c;可以使用ngx_http_mirror_module模块。 官网好像…

【Python】科研代码学习:十一 Optimization (Optimizer, Scheduler)

【Python】科研代码学习&#xff1a;十一 Optimization [Optimizer, Schedule] Optimizer 前置知识优化器在 torch 中的调用优化器在 transformers 中的调用AdamW 优化器 Scheduler 前置知识调度器在 transformers 中的调用 Optimizer 前置知识 什么是 Optimizer 优化器&#…

动态住宅代理IP使用教程全面讲解

在数字化时代&#xff0c;隐私保护和信息安全成为全球网民的共同关切。特别是对于海外用户&#xff0c;由于地理位置和网络监管政策的不同&#xff0c;访问全球信息资源变得更加复杂。使用动态住宅IP搭建代理&#xff0c;作为解决这一问题的有效手段&#xff0c;动态IP代理通过…

漏洞原理 | CORS跨域学习篇

0x01&#xff1a;原理 1、 什么是CORS 全称跨域资源共享&#xff0c;用来绕过SOP(同源策略)来实现跨域访问的一种技术。 CORS漏洞利用CORS技术窃取用户敏感信息 2、 同源策略简介 同源策略是浏览器最核心也是最基本的安全功能&#xff0c;不同源的客户端脚本在没有明确授权…

智慧城市与绿色出行:共同迈向低碳未来

随着城市化进程的加速&#xff0c;交通拥堵、空气污染、能源消耗等问题日益凸显&#xff0c;智慧城市与绿色出行成为了解决这些问题的关键途径。智慧城市利用信息技术手段&#xff0c;实现城市各领域的智能化管理和服务&#xff0c;而绿色出行则强调低碳、环保的出行方式&#…

2.2 评估方法 机器学习

我们若有一个包含m个样例的数据集&#xff0c;若我们既需要训练&#xff0c;也需要测试&#xff0c;我们该如何处理呢&#xff1f;下面是几种方法&#xff1a; 2.2.1 留出法 “留出法”直接将数据集D划分为两个互斥的集合&#xff0c;其中一个作为训练集S&#xff0c;另一个作…

OpenGL-贴纸方案

OpenGL-贴纸方案 普通贴纸&#xff08;缩放、Z轴旋转、平移&#xff09; OpenGL环境说明 OpenGL渲染区域使用正交投影换算,正常OpenGL坐标是vertexData,这样的 Matrix.orthoM 进行换算 //顶点坐标&#xff08;原点为显示区域中心店&#xff09;private final float[] vertex…

软件应用实例,宠物医院处方笺模板实例,佳易王兽医电子处方开单管理系统软件操作教程

软件应用实例&#xff0c;宠物医院处方笺模板实例&#xff0c;佳易王兽医电子处方开单管理系统软件操作教程 一、前言 以下软件程序操作教程以佳易王兽医电子处方软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、兽医宠物店开电子处…