当前位置: 首页 > news >正文

【C语言】考研复试上机代码题(基础篇)

文章目录

  • 一、输入与输出
      • 1、温度转换
      • 2、排齐数据
      • 3、进制转换
  • 二、选择分支结构
      • 1、分段函数求值
      • 2、成绩评定
      • 3、平闰年判定
      • 4、二次方程的根
      • 5、字符大小写
  • 三、循环结构程序
      • 1、倒数求和
      • 4、判断数根
      • 5、打印菱形
      • 6、最大公约数
      • 7、最小公倍数
      • 8、复读机
  • 四 、数组
      • 1、数组的批量增
      • 2、数组的批量删
      • 3、左小右大
      • 4、数组逆序
      • 5、数组循环右移
      • 6、最值交换
      • 7、数组排序
      • 8、谁频次最高
      • 9、矩阵运算
      • 10、矩阵乘积
      • 11、找字符索引
      • 12、大小写转换
      • 13、字符串比较
      • 14、字符串排序
      • 15、字符串插入
      • 16、字符串输出
  • 五、结构体 & 链表
      • 1、学生信息
      • 2、链表的创建
      • 3、链表的插入
      • 4、链表的删除
      • 5、链表的逆序


一、输入与输出

1、温度转换

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;double func(double f) {return 5*(f-32)/9;
}int main() {double c, f;cin >> f;c = func(f);printf("c=%.2lf\n", c);return 0;
}

2、排齐数据

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {char c; //字母 int bir, age; //出生年,年龄float hei; //身高scanf("%c,%d,%f", &c, &bir, &hei);age = 2024 - bir; //年龄printf("love:%-8cage:%-8dheight:%-8.2f\n", c, age, hei/100); return 0;
}

注意:

  • 在 C 语言中,%-8 通常出现在格式化输出函数(如 printf )的格式字符串中,用于控制输出的对齐方式和宽度。

  • - 表示左对齐。如果没有 -,输出默认是右对齐的。

  • 8 表示输出的最小宽度为 8 个字符。

3、进制转换

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;printf("%d %o %x %e", n, n, n, (float)(n));return 0;
}

注意:

  • 表示指数形式时,强制转换为 float 类型,你也可以转为 double 类型
  • 因为 %e 默认被转换的数据类型为浮点数类型,否则会出错

二、选择分支结构

1、分段函数求值

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int func(int x) {int y;if (x >= 0)y = -x + 1;else y = -x - 1;return y;
}int main() {int x;cin >> x;cout << func(x) << endl;return 0;
}

2、成绩评定

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {int x;cin >> x;if (x >= 90)cout << 'A';else if (x >= 80 && x < 90)cout << 'B';else if (x >= 70 && x < 80)cout << 'C';else if (x >= 60 && x < 70)cout << 'D';elsecout << 'E';cout << endl;return 0;
}

3、平闰年判定

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int isLeapYear(int y) {if ((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0)))return 1;return 0;
}int main() {int y;cin >> y;if (isLeapYear(y))cout << '0';else cout << '1';return 0;
}

4、二次方程的根

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {double a, b, c, delta;scanf("%lf %lf %lf", &a, &b, &c);delta = b * b - 4 * a * c;if (delta > 0) { //两个不同的实数根;double x1 = (-b + sqrt(delta)) / 2*a;double x2 = (-b - sqrt(delta)) / 2*a;printf("x1=%.3lf x2=%.3lf", x1, x2);}else if (delta == 0) {double x1 = (-b) / (2 * a); //一个实数重根;printf("x1=%.3lf x2=%.3lf", x1, x1);}else { //两个共轭复数根。printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi",-b / (2*a), (sqrt(-delta)) / (2*a),-b / (2*a), (sqrt(-delta)) / (2*a));}cout << endl;return 0;
}

注意:

在这里插入图片描述

5、字符大小写

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {char ch;cin >> ch;if (ch >= 'a' && ch <= 'z')printf("%c\n", ch -= 32); //小写变大小else if (ch >= 'A' && ch <= 'Z') printf("%c\n", ch += 32);elsecout << '0' << endl;return 0;
}

注意:

在这里插入图片描述
在这里插入图片描述

三、循环结构程序

1、倒数求和

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;double sum = 0;for (int i = 1; i <= n; i++) {sum +=  (1.0 / i); //写成1.0系统则会默认为浮点数类型计算,否则会丢失精度}printf("%.4lf\n", sum);return 0;
}

2、判断素数

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int isPrime(int n) {if (n == 1) //1不是素数 return 0;for (int i = 2; i * i <= n; i++) if (n % i == 0) return 0;  //能被整除, 说明不是素数 return 1;
}int main() {int n;cin >> n;if (isPrime(n))cout << "yes";elsecout << "no";cout << endl;return 0;
}

注意:

在这里插入图片描述

3、判断完数

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int func(int n) {int sum = 0;for (int i = 1; i < n; i++) {if (n % i == 0) sum += i;}if (sum == n)return 1;return 0;
}int main() {int n;cin >> n;for (int i = 1; i <= n; i++)if(func(i) == 1)cout << i << " "; cout << endl;return 0;
}

4、判断数根

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int digitSum(int n) {int sum, lastBit;sum = 0;while (n != 0) {//得到最后一位数字lastBit = n % 10;sum += lastBit;n /= 10; }return sum;
}int main() {int n;cin >> n;while (n >= 10)n = digitSum(n);cout << n;cout << endl;return 0;
}

5、打印菱形

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void func(int n) {//打印高度为n/2+1的上三角形 for (int i = 1; i <= n/2+1; i++) {for (int j = i; j <= n/2; j++)printf(" ");for (int j = 1; j <= 2*i-1; j++)printf("*");cout << endl;}//打印高度为n/2的倒三角形  for (int i = 1; i <= n/2; i++) {for (int j = 1; j <= i; j++)printf(" ");for (int j = 1; j <= n-2*i; j++)printf("*");cout << endl;}
}int main() {int n;cin >> n;func(n);cout << endl;return 0;
}

上半部分(正三角形):

  • 外层循环 for (int i = 1; i <= n/2+1; i++) 控制行数。
  • 第一个内层循环 for (int j = i; j <= n/2; j++) 打印空格,确保星号居中。
  • 第二个内层循环 for (int j = 1; j <= 2*i-1; j++) 打印星号,星号数量随行数增加。

下半部分(倒三角形):

  • 外层循环 for (int i = 1; i <= n/2; i++) 控制行数。
  • 第一个内层循环 for (int j = 1; j <= i; j++) 打印空格,确保星号居中。
  • 第二个内层循环 for (int j = 1; j <= n-2*i; j++) 打印星号,星号数量随行数减少。

在这里插入图片描述

6、最大公约数

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}int main() {int a, b;cin >> a >> b;cout << gcd(a, b);cout << endl;return 0;
}

辗转相除法(欧几里得算法):基于以下原理 gcd(a, b) = gcd(b, a % b),直到 b 为 0 时,a 就是最大公约数。

或者直接使用 C++ 标准库函数 __gcd(a, b),注意引用头文件 #include <algorithm>

7、最小公倍数

在这里插入图片描述

代码实现

// 计算最大公约数(GCD)
int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}// 计算最小公倍数(LCM)
int lcm(int a, int b) {return (a / gcd(a, b)) * b;
}int main() {int a, b;cin >> a >> b;cout << lcm(a, b);cout << endl;return 0;
}

最大公约数(GCD):

  • 使用辗转相除法(欧几里得算法)计算。
  • 公式:gcd(a, b) = gcd(b, a % b),直到 b 为 0。

最小公倍数(LCM):

  • 公式:lcm(a, b) = (a / gcd(a, b)) * b
  • 先除以最大公约数是为了避免乘法溢出。

避免溢出:

  • 在计算最小公倍数时,先进行除法运算 (a / gcd(a, b)),然后再乘以 b,这样可以减少中间结果的大小,避免整数溢出。

8、复读机

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {char ch;while ((ch = getchar()) != '#')putchar(ch);cout << endl;return 0;
}

注意:

  • putchar 用于输出单个字符,getchar 用于输入单个字符。
  • 它们是基于缓冲区的函数,适合处理简单的字符输入输出任务。
  • 在实际编程中,getcharputchar 常用于实现简单的字符处理逻辑,如字符统计、回显输入等。

字符统计代码

#include <stdio.h>int main() {int count = 0;printf("请输入一串字符,按回车结束: ");// 循环读取字符,直到遇到换行符while (getchar() != '\n') {count++; // 统计字符数}printf("你输入的字符数是: %d\n", count);return 0;
}

四 、数组

1、数组的批量增

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;#define maxSize 100// arr1: 1 2 3
// arr2: 4 5
// index=0
// arr1: 4 5 1 2 3
int Insert(int arr1[], int len1, int arr2[], int len2, int index) {if (len1 + len2 > maxSize || index > len1 || index < 0)return len1; //空间不够或者插入位置不合法//先为arr1向后挪动len2个位置, 一定是从后往前挪动 for (int i = len1 - 1; i >= index; i--)arr1[i + len2] = arr1[i];//再把arr2插入到arr1中for (int i = 0; i < len2; i++)arr1[index + i] = arr2[i]; len1 += len2;return len1;
}int main() {int len1, len2, index;int arr1[maxSize], arr2[maxSize];scanf("%d", &len1);for (int i = 0; i < len1; i++)scanf("%d", &arr1[i]);scanf("%d", &len2);for (int i = 0; i < len2; i++)scanf("%d", &arr2[i]);scanf("%d", &index);len1 = Insert(arr1, len1, arr2, len2, index);for (int i = 0; i < len1; i++)cout << arr1[i] << " ";cout << endl;return 0;
}

2、数组的批量删

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;#define maxSize 100int deleteX(int arr[], int n, int x) {int j = 0;for (int i = 0; i < n; i++) {if (arr[i] != x)arr[j++] = arr[i];}return j;
} int main() {int n, arr[maxSize], x;scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &arr[i]);scanf("%d", &x);n = deleteX(arr, n, x);for (int i = 0; i < n; i++)cout << arr[i] << " ";cout << endl;return 0;
}

3、左小右大

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;//把下标为index的元素左移step步 
void Move(int arr[], int index, int step) {int tmp = arr[index];int dest = index - step; //计算放入的位置//从前往后挪出一个位置来 for (int i = index - 1; i >= dest; i--)arr[i + 1] = arr[i];arr[dest] = tmp;
}void Part(int arr[], int n) {int x = arr[0]; //以第一个元素为基准 int cnt = 0; //记录大于x的元素个数 int i = 1; //从第二个元素开始 while (i < n) {if (arr[i] < x) //如果小于就移动 Move(arr, i, cnt+1); //左移cnt+1步 else if (arr[i] > x) //如果大于就记录 cnt++;else { //如果相等, 既要移动, 也要cnt++ Move(arr, i, cnt+1);cnt++;}i++;}}int main() {int n;scanf("%d", &n);int arr[n];for (int i = 0; i < n; i++)scanf("%d", &arr[i]);Part(arr, n);for (int i = 0; i < n; i++)cout << arr[i] << " ";return 0;
}

4、数组逆序

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void Reverse(int arr[], int n) {int i, j;for (i = 0, j = n-1; i <= j; i++, j--) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
}int main() {int n;scanf("%d", &n);int arr[n];for (int i = 0; i < n; i++)scanf("%d", &arr[i]);Reverse(arr, n);for (int i = 0; i < n; i++)cout << arr[i] << " ";return 0;
}

5、数组循环右移

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void reverse(int arr[], int start, int end) {while (start < end) {int tmp = arr[start];arr[start] = arr[end];arr[end] = tmp;start++;end--;}}void Move(int arr[], int n, int step) {step = step % n;reverse(arr, 0, n-1);    //先整体反转reverse(arr, 0, step-1); //再反转前0~step-1个元素 reverse(arr, step, n-1); //最后反转step~n-1个元素}int main() {int n, step;scanf("%d", &n);int arr[n];for (int i = 0; i < n; i++)scanf("%d", &arr[i]);scanf("%d", &step);Move(arr, n, step);for (int i = 0; i < n; i++)cout << arr[i] << " ";return 0;
}

6、最值交换

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void swapMin(int arr[], int n) {int min = 0;for (int i = 1; i < n; i++)if (arr[i] < arr[min])min = i;int tmp = arr[0];arr[0] = arr[min];arr[min] = tmp;
}void swapMax(int arr[], int n) {int max = 0;for (int i = 1; i < n; i++)if (arr[i] > arr[max])max = i;int tmp = arr[n - 1];arr[n - 1] = arr[max];arr[max] = tmp;
}int main() {int n;scanf("%d", &n);int arr[n];for (int i = 0; i < n; i++)scanf("%d", &arr[i]);swapMin(arr, n); swapMax(arr, n); for (int i = 0; i < n; i++)cout << arr[i] << " ";return 0;
}

7、数组排序

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;//这里要加引用 
void Swap(int &a, int &b) {int tmp = a;a = b;b = tmp;
}//冒泡排序 
void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {bool flag = false;//从后往前冒泡for (int j = n - 1; j > i; --j) {if (arr[j-1] > arr[j]) Swap(arr[j-1], arr[j]);flag = true;} if (!flag)return;}
}int main() {int n;scanf("%d", &n);int arr[n];for (int i = 0; i < n; i++)scanf("%d", &arr[i]);bubbleSort(arr, n);for (int i = 0; i < n; i++)cout << arr[i] << " ";return 0;
}

8、谁频次最高

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;//用来统计第i个元素出现了多少次 
int counter(int arr[], int n, int x) {int cnt = 0;for (int i = 0; i < n; i++) {if (arr[i] == x)	cnt++;}return cnt;
}void func(int arr[], int n) {int maxCount = -1;int maxCountId = -1;for (int i = 0; i < n; i++) {int tmp = counter(arr, n, arr[i]); //统计第i个元素出现了多少次if (tmp > maxCount) { //如果更大则更新 maxCount = tmp;maxCountId = i;}}printf("%d %d", arr[maxCountId], maxCount);
}int main() {int n;scanf("%d", &n);int arr[n];for (int i = 0; i < n; i++)scanf("%d", &arr[i]);func(arr, n);cout << endl; return 0;
}

9、矩阵运算

在这里插入图片描述

代码实现


4x4 的矩阵为例:

1   2   3   4
5   6   7   8
9   10  11  12
13  14  15  16

最后一行的索引是 n-1(即第 4 行,索引为 3):13 14 15 16

最后一列的索引是 n-1(即第 4 列,索引为 3):4 8 12 16

副对角线是从矩阵的右上角到左下角的连线。对于 n×n 的矩阵,副对角线上的元素满足条件 i + j = n - 1(其中 i 是行索引,j 是列索引)。

  • i = 0, j = 3,为 4
  • i = 1, j = 2,为 7
  • i = 2, j = 1,为 10
  • i = 3, j = 0,为 11

我们需要排除:

  • 最后一行:13 14 15 16
  • 最后一列:4 8 12 16
  • 副对角线:4 7 10 13

排除这些元素后,剩下的元素是:

1  2  3
5  6
9  11

它们的和为:

1 + 2 + 3 + 5 + 6 + 9 + 11 = 37

代码逻辑:

  • 排除最后一行:i < n - 1
  • 排除最后一列:j < n - 1
  • 排除副对角线:i + j != n - 1

10、矩阵乘积

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void func(int A[10][10], int B[10][10], int m, int n, int p) {// 定义结果矩阵 Cint C[10][10] = { 0 }; // 初始化为 0// 计算矩阵乘法for (int i = 0; i < m; i++) {for (int j = 0; j < p; j++) {for (int k = 0; k < n; k++) {C[i][j] += A[i][k] * B[k][j];}}}// 输出结果矩阵 Cfor (int i = 0; i < m; i++) {for (int j = 0; j < p; j++) {cout << C[i][j] << " ";}cout << endl;}
}int main() {int m, n, p;// 输入矩阵 A 的维度cin >> m >> n;// 定义矩阵 Aint A[10][10];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> A[i][j];}}// 输入矩阵 B 的维度cin >> n >> p;// 定义矩阵 Bint B[10][10];for (int i = 0; i < n; i++) {for (int j = 0; j < p; j++) {cin >> B[i][j];}}func(A, B, m, n, p);return 0;
}

矩阵乘法:

  • 矩阵乘法的规则是:结果矩阵 C 的第 (i, j) 个元素是矩阵 A 的第 i 行与矩阵 B 的第 j 列的点积。

使用三重循环实现矩阵乘法:

  • 外层循环遍历结果矩阵 C 的行 i
  • 中层循环遍历结果矩阵 C 的列 j
  • 内层循环计算点积 k

注意事项:

  • 矩阵 A 的列数必须等于矩阵 B 的行数,否则无法进行矩阵乘法。
  • 代码假设矩阵的最大维度为 10x10,可以根据实际需求调整数组大小。
  • 输入时需要确保矩阵的维度满足 m < 10, n < 10, p < 10

11、找字符索引

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;// 查找字符 ch 在字符串 str 中最后一次出现的位置(从 0 开始计数)
int func(string str, char ch) {for (int i = str.size() - 1; i >= 0; i--) { // 从后向前遍历if (str[i] == ch)return i; // 返回位置(从 0 开始计数)}return -1; // 未找到返回 -1
}int main() {char ch;string str;cin >> ch >> str;// 查找字符 ch 在字符串 str 中的位置int index = func(str, ch);// 输出结果if (index != -1)cout << "index=" << index << endl;elsecout << "Not Found" << endl;return 0;
}

12、大小写转换

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {char str[101] = { '\0' };int i = 0;// 读取输入并处理大小写转换while (scanf("%c", &str[i]) && (str[i] != '#')) {if (str[i] >= 'A' && str[i] <= 'Z')str[i] += 32;else if (str[i] >= 'a' && str[i] <= 'z')str[i] -= 32;i++;}// 逆序输出i--;while (i >= 0) {cout << str[i];i--;}return 0;
}

13、字符串比较

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;// 比较两个字符串
int cmpstr(char s1[], char s2[]) {int i = 0;// 逐个字符比较while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0') {i++;}// 根据字符大小返回结果if (s1[i] == '\0' && s2[i] == '\0') {return 0; // 字符串相等} else {return (s1[i] > s2[i]) ? 1 : -1; // s1 大于 s2 返回 1,否则返回 -1}
}int main() {char s1[101] = { '\0' };char s2[101] = { '\0' };cin.getline(s1, 100);cin.getline(s2, 100);int ret = cmpstr(s1, s2);cout << ret << endl;return 0;
}

使用 cin.getline 替代 gets

  • gets 函数不检查输入长度,容易导致缓冲区溢出。
  • cin.getline 可以指定最大读取长度,避免缓冲区溢出。

14、字符串排序

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n; // 输入字符串的数量vector<string> str(n); // 创建一个存储字符串的向量// 输入n个字符串for (int i = 0; i < n; i++) {cin >> str[i];}// 对字符串进行升序排序sort(str.begin(), str.end());// 输出排序后的结果for (auto s : str) {cout << s << endl;}return 0;
}

vector<string> str(n) 的意思是:

  • 创建一个名为 str 的动态数组。
  • 这个数组可以存储 n 个 string 类型的元素。
  • 数组的初始大小为 n,每个元素是一个空字符串。

15、字符串插入

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void insertStr(char str1[], char str2[], int pos) {// // 计算str1和str2的长度int len1 = strlen(str1);int len2 = strlen(str2);// 将pos从1转换为0(C++数组下标从0开始)pos--;// 将str1中从pos开始的字符向后移动len2个位置,为插入str2腾出空间for (int i = len1 - 1; i >= pos; i--)str1[i + len2] = str1[i];// 将str2的内容复制到str1的pos位置for (int i = 0; i < len2; i++)str1[pos + i] = str2[i];// 在str1的末尾添加字符串结束符'\0'str1[len1 + len2] = '\0';
}int main() {char str1[101] = { '\0' };char str2[101] = { '\0' };int pos;cin.getline(str1, 100);cin.getline(str2, 100);cin >> pos;insertStr(str1, str2, pos);printf("%s", str1);cout << endl;return 0;
}

16、字符串输出

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;void deleteStr(char str[], char subStr[]) {// 计算str和subStr长度int len = strlen(str);int subLen = strlen(subStr);int start = 0; // 初始化起始查找位置// 当起始位置不超过【str长度减去subStr长度】时, 进入循环while (start <= len - subLen) { int flag = 1; // 标志位,用于判断是否找到匹配的子字符串// 遍历子字符串的每个字符for (int i = 0; i < subLen; i++) {if (str[start + i] != subStr[i]) {  // 如果字符不匹配flag = 0; // 设置标志位为0,表示未找到匹配break; // 跳出循环}}// 如果找到匹配的子字符串if (flag) { // 将str中从start + subLen开始的字符向前移动subLen个位置,覆盖子字符串for (int i = start + subLen; i < len; i++) {str[i - subLen] = str[i];}// 更新str的长度len = len - subLen; }else {start++; // 未找到匹配,起始位置向后移动一位}}str[len] = '\0';
}int main() {char str[101] = { '\0' };char subStr[101] = { '\0' };cin.getline(str, 100);cin.getline(subStr, 100);deleteStr(str, subStr);printf("%s", str);cout << endl;return 0;
}

五、结构体 & 链表

1、学生信息

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;//需要额外的一个字符来存储字符串结束符 '\0'
typedef struct Student {char name[11];char gender[11];int age;char id[11];
}Stu;int main() {int n;cin >> n;Stu s[n];for (int i = 0; i < n; i++) {cin >> s[i].name >> s[i].gender >> s[i].age >> s[i].id;// 检查是否有重复的ID for (int j = 0; j < i; j++) {if (0 == strcmp(s[i].id, s[j].id)){cout << "ERROR" << endl;i--; // 重新录入, i要回退 break;}}}// 按照格式打印输出 for (int i = 0; i < n; i++) {printf("%-10s%-10s%-10d%-10s\n", s[i].name, s[i].gender, s[i].age, s[i].id);}return 0;
}

2、链表的创建

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;typedef struct node {int data;struct node *next;
}LNode, *LinkList; // 创建带头结点的单链表(尾插法) 
LinkList createList(int arr[], int n) {LinkList head = (LinkList)malloc(sizeof(LNode)); // 创建头节点head->next = NULL; // 初始化头节点的 next 指针为空LNode *rear = head; // rear 指向链表的最后一个节点for (int i = 0; i < n; i++) {LNode* newNode = (LNode*)malloc(sizeof(LNode)); // 创建新节点newNode->data = arr[i]; // 设置新节点的数据newNode->next = NULL; // 初始化新节点的 next 指针为空rear->next = newNode; // 将新节点连接到链表的末尾rear = newNode; // 更新 rear 指针}return head; // 返回链表的头节点
} // 打印单链表 
void displayList(LinkList head) {LNode* cur = head->next;while (cur != NULL) {printf("%d->", cur->data);cur = cur->next;}cout << "NULL";
}int main() {int n;cin >> n;int arr[n];for (int i = 0; i < n; i++)cin >> arr[i];LinkList head = createList(arr, n);displayList(head);return 0;
}

LNode

  • struct node 的别名。
  • 用于表示链表中的一个节点。
  • 例如:LNode newNode; 声明一个节点变量。

*LinkList

  • struct node* 的别名。
  • 用于表示指向链表节点的指针,通常用来表示整个链表(指向头结点)。
  • 例如:LinkList head; 声明一个指向链表头节点的指针。

LNode 的功能:

  • 表示链表中的一个节点。
  • 包含两个成员:
    • data:存储节点的数据。
    • next:指向下一个节点的指针。

*LinkList 的功能:

  • 表示指向链表节点的指针。
  • 通常用于指向链表的头节点,从而表示整个链表。
  • 例如:
    • LinkList head; 表示指向链表头节点的指针。
    • head->next 可以访问链表中的第一个节点。

总结:

  • LNode 是链表节点的别名,用于表示链表中的一个节点。
  • *LinkList 是指向链表节点的指针的别名,通常用于表示整个链表(指向头节点)。
  • createList 函数中,LNode 用于创建新节点,*LinkList 用于返回链表的头节点。

3、链表的插入

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;typedef struct node {int data;struct node *next;
}LNode, *LinkList; // 创建带头结点的单链表(尾插法) 
LinkList createList(int arr[], int n) {LinkList head = (LinkList)malloc(sizeof(LNode)); // 创建头节点head->next = NULL; // 初始化头节点的 next 指针为空LNode *rear = head; // rear 指向链表的最后一个节点for (int i = 0; i < n; i++) {LNode* newNode = (LNode*)malloc(sizeof(LNode)); // 创建新节点newNode->data = arr[i]; // 设置新节点的数据newNode->next = NULL; // 初始化新节点的 next 指针为空rear->next = newNode; // 将新节点连接到链表的末尾rear = newNode; // 更新 rear 指针}return head; // 返回链表的头节点
} // 在第pos个位置插入x 
int insertList(LinkList head, int x, int pos) {if (pos < 0)return 0;// 生成要插入的结点LNode* newNode = (LNode*)malloc(sizeof(LNode));newNode->data = x;newNode->next = NULL;// 找到待插入的位置LNode* pre = head;for (int i = 0; i < pos; i++) {if (pre->next != NULL)pre = pre->next;elsereturn 0;}//开始插入newNode->next = pre->next;pre->next = newNode;return 1; 
}// 打印单链表 
void displayList(LinkList head) {LNode* cur = head->next;while (cur != NULL) {printf("%d->", cur->data);cur = cur->next;}cout << "NULL";
}int main() {int n;cin >> n;int arr[n];for (int i = 0; i < n; i++)cin >> arr[i];// 尾插法创建单链表 LinkList head = createList(arr, n);// 在第pos个尾插插入x int x, pos;cin >> x >> pos;insertList(head, x, pos);// 打印链表 displayList(head);return 0;
}

4、链表的删除

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;typedef struct node {int data;struct node *next;
}LNode, *LinkList; // 创建带头结点的单链表(尾插法) 
LinkList createList(int arr[], int n) {LinkList head = (LinkList)malloc(sizeof(LNode)); // 创建头节点head->next = NULL; // 初始化头节点的 next 指针为空LNode *rear = head; // rear 指向链表的最后一个节点for (int i = 0; i < n; i++) {LNode* newNode = (LNode*)malloc(sizeof(LNode)); // 创建新节点newNode->data = arr[i]; // 设置新节点的数据newNode->next = NULL; // 初始化新节点的 next 指针为空rear->next = newNode; // 将新节点连接到链表的末尾rear = newNode; // 更新 rear 指针}return head; // 返回链表的头节点
} // 删除第pos个位置的结点 
int deleteList(LinkList head, int pos) {if (pos < 0)return 0;// 找到待删除结点的前一个结点LNode* pre = head;int step = 0;while (step < pos) {if (pre->next != NULL) {pre = pre->next;step++;}else {return 0;}} if (pre->next != NULL) {LNode* delNode = pre->next;pre->next = delNode->next;free(delNode);return 1;}return 0;
} // 打印单链表 
void displayList(LinkList head) {LNode* cur = head->next;while (cur != NULL) {printf("%d->", cur->data);cur = cur->next;}cout << "NULL";
}int main() {int n;cin >> n;int arr[n];for (int i = 0; i < n; i++)cin >> arr[i];// 尾插法创建单链表 LinkList head = createList(arr, n);// 删除第pos个位置的元素 int pos;cin >> pos;deleteList(head, pos);// 打印链表 displayList(head);return 0;
}

注意:这里是删除索引位置的元素。

5、链表的逆序

在这里插入图片描述

代码实现

#include <bits/stdc++.h>
using namespace std;typedef struct node {int data;struct node *next;
}LNode, *LinkList; // 创建带头结点的单链表(尾插法) 
LinkList createList(int arr[], int n) {LinkList head = (LinkList)malloc(sizeof(LNode)); // 创建头节点head->next = NULL; // 初始化头节点的 next 指针为空LNode *rear = head; // rear 指向链表的最后一个节点for (int i = 0; i < n; i++) {LNode* newNode = (LNode*)malloc(sizeof(LNode)); // 创建新节点newNode->data = arr[i]; // 设置新节点的数据newNode->next = NULL; // 初始化新节点的 next 指针为空rear->next = newNode; // 将新节点连接到链表的末尾rear = newNode; // 更新 rear 指针}return head; // 返回链表的头节点
} // 链表逆序
void reverseList(LinkList head) {LNode *cur = head->next;head->next = NULL;while (cur != NULL) {LNode* curNext = cur->next;cur->next = head->next;head->next = cur;cur = curNext;}
} // 打印单链表 
void displayList(LinkList head) {LNode* cur = head->next;while (cur != NULL) {printf("%d->", cur->data);cur = cur->next;}cout << "NULL";
}int main() {int n;cin >> n;int arr[n];for (int i = 0; i < n; i++)cin >> arr[i];// 尾插法创建单链表 LinkList head = createList(arr, n);// 链表逆序reverseList(head); // 打印链表 displayList(head);return 0;
}

相关文章:

【C语言】考研复试上机代码题(基础篇)

文章目录 一、输入与输出1、温度转换2、排齐数据3、进制转换 二、选择分支结构1、分段函数求值2、成绩评定3、平闰年判定4、二次方程的根5、字符大小写 三、循环结构程序1、倒数求和4、判断数根5、打印菱形6、最大公约数7、最小公倍数8、复读机 四 、数组1、数组的批量增2、数组…...

video可以播放视屏但无法使用进度条点击快进/video的进度条失效无法点击

1、问题描述? 1、在SpringBoot+jQuery的$.get+HTML的video,进行动态加载视屏的时候,页面可以正常的播放视频,但是video自带的点击进度条快进视频功能失效。即如下进度条无法点击,只能顺序播放。 2、视频格式是mp4格式。 3、在主流的浏览器中都可以实现点击播放,但是进度…...

DeepSeekR1之四_在RAGFlow中配置DeepSeekR1模型

DeepSeekR1之四_在RAGFlow中配置DeepSeekR1模型 文章目录 DeepSeekR1之四_在RAGFlow中配置DeepSeekR1模型1. 通过Ollama下载模型1. 下载DeepSeekR1模型2. 下载嵌入模型 2. 查看本地的Ollama模型3. 模型提供商中添加模型1. 打开模型提供商2. 选择Ollama待添加模型3. 添加DeepSee…...

electron + vue3 + vite 渲染进程与渲染进程之间的消息端口通信

渲染进程与渲染进程之间的通信有两种&#xff1a; 通过主进程进行消息转发&#xff08;通过组合主进程与渲染进程之间的单向、双向通信可以实现&#xff0c;可以自己动手尝试&#xff0c;该篇不讲解&#xff09;通过消息端口进行直接通信 该篇主要用示例讲解下单项目内多个窗口…...

MySQL性能调优实战手册:从慢查询到执行计划全解析

一、调优流程四步走 &#x1f680; 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢? 这里把思考的流程整理成下面这张图。 整个流程划分成了观察&#xff08;Show status&#xff09;和 行动(Action&#xff09;两个部分。字母S的部分代表观察&#xff08;会使用相…...

作为高数小白,我尝试理解概念:高数 - 导数

作为C#开发者&#xff0c;其实我是一个高数小白&#xff0c;可是我对它极其好奇&#xff0c;非常想了解它里面到底讲了什么内容&#xff0c;貌似这对于我是一个非常艰难的过程&#xff0c;因为完全没有接触过高等数学&#xff0c;可是又太想去了解。所以我计划开始慢慢学习它。…...

在 IntelliJ IDEA(2024) 中创建 JAR 包步骤

下是在 IntelliJ IDEA 中创建 JAR 包的详细的步骤&#xff1a; ​1. 选择File -> Project Structure->Artifacts&#xff0c; (1)点击➕新建&#xff0c;如下图所示&#xff1a; (2)选择JAR->Empty (3)输入jar包名称&#xff0c;确定输出路径 &#xff08;4&#…...

『PostgreSQL』PGSQL备份与还原实操指南

&#x1f4e3;读完这篇文章里你能收获到 了解逻辑备份与物理备份的区别及适用场景&#x1f50d;。掌握全库、指定库、指定表备份还原的命令及参数&#x1f4dd;。学会如何根据业务需求选择合适的备份策略&#x1f4ca;。熟悉常见备份还原问题的排查与解决方法&#x1f527;。 …...

Mentalab Explore 在低密度 EEG 系统中的创新应用

在当今科技飞速发展的时代&#xff0c;脑电图&#xff08;EEG&#xff09;技术已成为神经科学研究、医疗诊断和教育领域广泛使用的工具。Mentalab Explore 作为一款专为灵活性和高效性设计的便携式低密度 EEG 系统&#xff0c;凭借其性能和多样的应用场景&#xff0c;正引领着便…...

Ubuntu 24.04.2 允许 root 登录桌面、 ssh 远程、允许 Ubuntu 客户机与主机拖拽传递文件

允许 root 登录桌面 修改 /etc/pam.d/gdm-autologin , /etc/pam.d/gdm-password 加 # 以注释掉 auth required pam_succeed_if.so user ! root quiet_success 允许 root 通过 ssh 登录 修改 /etc/ssh/sshd_config ... #PermitRootLogin prohibit-password PermitRootLogin …...

ngx_openssl_create_conf

ngx_openssl_create_conf 声明在 src\event\ngx_event_openssl.c static void *ngx_openssl_create_conf(ngx_cycle_t *cycle); 定义在 src\event\ngx_event_openssl.c static void * ngx_openssl_create_conf(ngx_cycle_t *cycle) {ngx_openssl_conf_t *oscf;oscf ngx_…...

数学 二次函数

二次函数 就是计算一个抛物线。 抛物线的基本公式&#xff1a; 重点中的重点就是解决&#xff1a; &#xff08;开口方向&#xff1a; 对称轴&#xff0c;顶点&#xff0c;交点&#xff09; 这里的 y 和 x 就是 这个抛物线的个个点的坐标连成的线。 a 的正负 决定和大小决定…...

系统架构的评估的系统的质量属性

体系结构苹果可以针对一个体系结构&#xff0c;也可以针对一组体系结构。 体系结构评估过程中&#xff0c;评估人员所关注的是系统的质量属性&#xff0c;所有评估方法所普遍关注的质量属性有以下几个&#xff1a;性能、可靠性&#xff08;容错&#xff0c;健壮性&#xff09;…...

Facebook 的历史与发展:从校园网站到全球社交平台

引言 Facebook&#xff0c;这个全球最大的社交网络平台之一&#xff0c;其发展历程充满了创新和变革。从最初的校园网站到如今的全球社交平台&#xff0c;Facebook 不仅改变了人们的沟通方式&#xff0c;也重塑了信息传播和社交互动的模式。 起源&#xff1a;校园内的点子 Fa…...

开源、创新与人才发展:机器人产业的战略布局与稚晖君成功案例解析

目录 引言 一、开源&#xff1a;机器人产业的战略布局 促进技术进步和生态建设 吸引人才和合作伙伴 建立标准和网络效应 降低研发风险与成本 二、稚晖君&#xff1a;华为"天才少年计划"的成功典范 深厚的技术积累与动手能力 强烈的探索和创新意识 持续公开…...

Visual Studio 2022新建c语言项目的详细步骤

步骤1&#xff1a;点击创建新项目 步骤2&#xff1a;到了项目模板 --> 选择“控制台应用” (在window终端运行代码。默认打印"Hello World") --> 点击 “下一步” 步骤3&#xff1a;到了配置新项目模块 --> 输入“项目名称” --> 更改“位置”路径&…...

利用FatJar彻底解决Jar包冲突(三)

利用FatJar彻底解决Jar包冲突 Spring 容器的加载与隔离⽀持注解配置⽂件定位与容器初始化嵌套Spring容器的加载 隔离优化EagleEye traceId不⼀致问题原因解决 Spring 容器的加载与隔离 ⽀持注解 这个⽐较容易&#xff0c;主要是我们之前的应⽤不⽀持⼆⽅包内部的注解&#xf…...

【TMS570LC4357】之工程创建

备注&#xff1a;具体资料请在官网海淘.TMS570LC4357资料 1. 下载软件 官网下载对应的编译编辑工具如下图&#xff0c;主要是这两个&#xff0c;其它Flash工具等酌情考虑 安装软件&#xff0c;一直next就可以。安装后新建工程 2. 新建工程 如果不知道怎么建工程&#xff0…...

工作记录 2016-12-22

工作记录 2016-12-22 更新的问题 1、修改了Job Summary的Bill Amount的Bug。 2、修改了Account #的宽度。 3、修改了Clearinghouse Status的默认查询的条件。 4、修改了Upload Files的Add File的bug。 5、Pending Pool、Missing Infos加了Write Off&#xff0c;修改了Histor…...

若依-导出后端解析

针对若依框架微服务版本学习 若依导入导出功能的具体使用详见&#xff1a;后台手册 | RuoYi 1.导出逻辑&#xff1a; 导出文件的逻辑是先创建一个临时文件&#xff0c;等待前端请求下载结束后马上删除这个临时文件。但是有些下载插件&#xff0c;例如迅雷&#xff08;他们是二…...

【QT5 Widgets示例】记事本:(二)界面设计

文章目录 记事本&#xff1a;&#xff08;二&#xff09;界面设计设置窗口标题和图标创建菜单工具栏创建文本框 记事本&#xff1a;&#xff08;二&#xff09;界面设计 设置窗口标题和图标 标题 点击窗口&#xff0c;修改windowTitle项 图标 点击windowIcon 倒三角&#xf…...

MPPT与PWM充电原理及区别详解

MPPT&#xff08;最大功率点跟踪&#xff09;和PWM&#xff08;脉宽调制&#xff09;是太阳能充电控制器中常用的两种技术&#xff0c;它们在原理、效率和适用场景上有显著区别。以下是两者的详细对比&#xff1a; 1. 工作原理 PWM&#xff08;脉宽调制&#xff09; 核心机制…...

K8S 集群搭建——cri-dockerd版

目录 一、工作准备 1.配置主机名 2.配置hosts解析 3.配置免密登录&#xff08;只需要在master上操作&#xff09; 4.时间同步&#xff08;每台节点都要做&#xff0c;必做&#xff0c;否则可能会因为时间不同步导致集群初始化失败&#xff09; 5.关闭系统防火墙 6.配置…...

使用express创建服务器保存数据到mysql

创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…...

ubuntu-学习笔记-nginx+php

nginxphp nginx下载nginx配置nginx.conf php其他 记录一下在ubuntu中nginxphp部署tp项目 nginx nginx就是正常下载 下载nginx sudo apt-get install nginx tp项目版本是3.2&#xff0c;通过设置路由&#xff0c;以域名/api.php/控制器/xxx的格式进行api的调用&#xff0c;文…...

打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手

DeepSeek AI 聊天助手集成指南 先看完整效果&#xff1a; PixPin_2025-02-19_09-15-59 效果图&#xff1a; 目录 项目概述功能特点环境准备项目结构组件详解 ChatContainerChatInputMessageBubbleTypeWriter 核心代码示例使用指南常见问题 项目概述 基于 Vue 3 TypeScrip…...

github生成badges的方法

在Github页面上生成类似下面这样的badge的方法 你可以通过以下步骤在GitHub个人主页的README中创建类似的技术栈徽章&#xff1a; 一、使用 Shields.io 生成徽章 Shields.io 是一个开源徽章生成工具&#xff0c;支持自定义文本、颜色、图标等参数。 1. 基础模板 https://…...

vulnhub靶场渗透之SickOs1.2渗透教程,计划任务提权、chkrootkit提权

vulnhub靶场渗透之SickOs1.2渗透教程&#xff0c;计划任务提权、chkrootkit提权 一、信息收集 1、首先拿到靶场先扫一下ip 2025.3.7 AM 8&#xff1a;36 arp-scan -l 扫描同网段 nmap -sP 192.168.66.24/02、指纹扫描 nmap -sS -sV 192.168.66.130 指纹扫描PORT STATE S…...

Ubuntu系统部署.NET 8网站项目

一、使用XShell连接 Ubuntu系统初次连接时默认的用户名为&#xff1a;ubuntu&#xff0c;使用此用户名与系统登录密码进行连接。 登录成功效果如下图&#xff1a; 二、root用户登录 linux下有超级用户&#xff08;root&#xff09;和普通用户&#xff0c;普通用户不能直接操…...

CI/CD—Jenkins配置一次完整的jar自动化发布流程

背景&#xff1a; 实现设想&#xff1a; 要创建自动化发布&#xff0c;需要准备一台测试服务器提前安装好java运行所需的环境&#xff0c;JDK版本最好和Windows开发机器上的版本一致&#xff0c;在Jenkins上配置将构建好的jar上传到测试服务器上&#xff0c;测试服务器自动启动…...

【Academy】Web 缓存欺骗 ------ Web cache deception

Web 缓存欺骗 ------ Web cache deception 1. 概述2. Web 缓存2.1 缓存键2.2 缓存规则 3. 构建 Web 缓存欺骗攻击3.1 使用缓存破坏器3.2 检测缓存的响应 4. 利用静态扩展缓存规则4.1 路径映射差异4.2 利用路径映射差异4.3 分隔符差异4.4 利用分隔符差异4.5 分隔符解码差异4.6 利…...

MATLAB表格Table与时间序列Timetable的高效操作方法

MATLAB中的表格&#xff08;Table&#xff09; 和 时间序列&#xff08;Timetable&#xff09; 是处理结构化数据和时间相关数据的核心工具。以下从基础操作到高级技巧&#xff0c;分步骤详解其使用方法。 一、创建与基础操作 1. 表格&#xff08;Table&#xff09;的创建与访…...

【leetcode hot 100 21】合并两个有序链表

解法一&#xff1a;新建一个链表存放有序的合并链表。当list1和list2至少有一个非空时&#xff0c;返回非空的&#xff1b;否则找出两个链表的最小值作为新链表的头&#xff0c;然后依次比较两链表&#xff0c;每次都先插入小的值。 /*** Definition for singly-linked list.*…...

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建 我的电脑是Windows 10版本&#xff0c;其他的没尝试&#xff0c;如果大家系统和我的不一致&#xff0c;请自行判断&#xff0c;基本上没什么大的出入啊。 openManus的Git地址&#xff1a;https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…...

20250310:OpenCV mat对象与base64互转

代码: https://github.com/ReneNyffenegger/cpp-base64 指南:https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp/ 实操:...

WPS的付费功能,这款软件可完美平替

因为作者有工作上的需求加上WPS使用批量提取图片需要会员&#xff0c;所以自己使用cursor制作了一个从excel中提取图片的工具。 支持提取Excel中的浮动图片和根据图片链接来下载图片。 Excel Image Extractor Excel图片提取工具 软件的功能非常强大&#xff0c;支持提取Excel中…...

L1-088 静静的推荐

L1-088 静静的推荐 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 这里代码很简单&#xff0c;但是主要是循环里面的内容很难理解&#xff0c;下面是关于循环里面的内容理解&#xff1a; 这里 n 10 表示有 10 个学生&#xff0c;k 2 表示企业接受 2 批次的推荐名单&#…...

NS3学习——运行自定义拥塞控制算法步骤

目录 一、添加优化后的代码文件 二、更改CMakeLists文件中内容 三、重新配置和编译ns-3 四、常见问题 目的&#xff1a;想在tcp拥塞控制算法的基础上进行优化改进&#xff0c;之后在ns3中运行优化后的算法&#xff0c;即自定义拥塞控制算法&#xff1b; 以tcpVegas算法为…...

前端开发中的常见设计模式:全面解析与实践

1. 引言 1.1 设计模式的重要性 设计模式是软件开发中经过验证的解决方案&#xff0c;能够帮助开发者解决常见的设计问题。在前端开发中&#xff0c;合理使用设计模式可以提高代码的可维护性、可扩展性和复用性。 1.2 本文的目标 本文旨在全面解析前端开发中常见的设计模式&…...

VSCode 2025最新 前端开发必备插件推荐汇总(提效指南)

&#x1f31f;前言: 如果你是一名前端开发工程师&#xff0c;合适的开发工具能大大提高工作效率。Visual Studio Code (VSCode) 凭借其轻量级、高扩展性的特点&#xff0c;已成为众多前端开发者在win系电脑的首选IDE。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。—…...

【redis】redis的单线程模型为什么效率高?

文章目录 单线程模型单线程的 Redis 为什么效率高&#xff1f;速度快&#xff1f;IO多路复用epoll 单线程模型 Redis 只使用一个线程&#xff0c;处理所有的命令请求。不是说一个 Redis 服务器进程内部只有一个线程&#xff0c;其实也有多个线程&#xff0c;多个线程是在处理网…...

scala的集合

scala的集合系统的区分了可变&#xff08; mutable &#xff09;和不可变&#xff08;immutable &#xff09;集合。 mkString(seq:String)&#xff1a;方法是将原字符串使用特定的字符串seq分割。 mkString(statrt:String,seq:String,end:String)&#xff1a;方法是将原字符…...

Flink状态管理深度探索:从Keyed State到分布式快照

Flink状态管理深度探索:从Keyed State到分布式快照 在大数据实时计算领域,Apache Flink凭借其精准的状态管理能力成为行业标杆。本文将从状态管理的核心机制出发,结合金融行业PB级数据处理实践,深入解析状态后端、容错机制与大规模优化策略。 一、Flink状态管理核心架构 …...

Android 11 DAC和MAC

在 Android 11 中,DAC(Discretionary Access Control,自主访问控制) 和 MAC(Mandatory Access Control,强制访问控制) 是两种不同的访问控制机制,主要用于 权限管理、安全性 以及 进程间访问控制。 1. DAC(自主访问控制) DAC(Discretionary Access Control,自主访…...

平衡二叉树(AVL树)

平衡二叉树是啥我就不多说了&#xff0c;本篇博客只讲原理与方法。 首先引入平衡因子的概念。平衡因子&#xff08;Balance Factor&#xff09;&#xff0c;以下简称bf。 bf 右子树深度 - 左子树深度。平衡结点的平衡因子可为&#xff1a;-1&#xff0c;0&#xff0c;1。除此…...

SSM架构 +java后台 实现rtsp流转hls流,在前端html上实现视频播放

序言&#xff1a;书接上文&#xff0c;我们继续 SSM架构 NginxFFmpeg实现rtsp流转hls流&#xff0c;在前端html上实现视频播放 步骤一&#xff1a;把rtsp流转化为hls流&#xff0c;用Java代码进行转换 package com.tools;import java.io.BufferedReader; import java.io.IOExc…...

贪心算法--

1.柠檬水找零 link:860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法&#xff0c; 优先花出大面额bill&#xff0c; 尽可能保护小面额billint five 0, ten 0;// 不…...

【从0到1搞懂大模型】神经网络的实现:数据策略、模型调优与评估体系(3)

一、数据集的划分 &#xff08;1&#xff09;按一定比例划分为训练集和测试集 我们通常取8-2、7-3、6-4、5-5比例切分&#xff0c;直接将数据随机划分为训练集和测试集&#xff0c;然后使用训练集来生成模型&#xff0c;再用测试集来测试模型的正确率和误差&#xff0c;以验证…...

CTF工具集合-持续更新

工具地址https://github.com/huan-cdm/ctf_tools工具介绍&#xff1a; 1.ARCHPR&#xff1a;压缩包密码破解工具 2.StegSolve-1.4.jar&#xff1a;隐写图片查看工具 3.ctf_decrypt_tool.rar&#xff1a;随波逐流CTF编码工具 4.010_Editor_All_Versions_For_Windows_CracKed.…...

小方摄像头接入本地服务器的方法

最早众筹时买了几个小方摄像头&#xff0c;后来嫌弃分辨率&#xff0c;就淘汰吃灰好几年&#xff0c;最近想折腾个摄像头识别的小项目&#xff0c;秉着不投入先凑合跑起来的原则&#xff0c;想到了尘封已久的小方&#xff0c;想看看能不能通过网络拉取数据流。 搜索了下&#x…...