递归

函数的定义

注意一下在命名函时,可以不写参数的名称,比如:

1
void fun(int,int)

结构体排序

1
2
3
4
5
6
7
8
9
10
11
12
13
void mySwap(Data *p1,Data *p2){//交换函数
    Data t=*p1;
    *p1=*p2;
    *p2=t;
}
for(int i=0;i<n-1;i++){
    for(int j=0;j<n-i-1;j++){
       if(a[j].num>a[j+1].num ||
       (a[j].num==a[j+1].num && a[j].value>a[j+1].value)){
           mySwap(&a[j],&a[j+1]);
        }
    }
}
  • 传入时注意,要加上&,传入地址,使得函数可以交换地址。

数组的定义

  • 使用new和delete一起运算。

基本方法

1
2
3
4
// 创建一维动态数组
数据类型* 指针名 = new 数据类型[元素个数];
// 释放内存
delete[] 指针名;

一维数组

示例

1
2
3
4
// 方法1:创建基本类型的一维数组
int n = 5;
int* arr1 = new int[n]; // 创建包含5个整数的数组
delete[] arr1;

二维数组

  • 比一维数组多了一个*

内存连续

1
2
3
4
5
6
7
8
 // 分配连续内存
int** arr = new int*[rows]; // 创建行指针数组
arr[0] = new int[rows * cols]; // 分配所有元素的空间

// 设置行指针
for (int i = 1; i < rows; i++) {
arr[i] = arr[i-1] + cols;
}

内存不连续

1
2
3
4
5
// 创建二维数组
int** arr = new int*[rows]; // 创建行指针数组
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols]; // 为每一行分配内存
}