8.8暑假集训-一维数组(下) 快点进来,超详细!

一维数组(下)–一维数组一般运用

一、数组元素的插入

作用
在数组指定位置添加新元素,改变数组元素的排列。

用法步骤

  1. 确定插入新元素的位置,标记其下标 pos
  2. 从数组末尾开始,将 pos 及之后的元素依次向后移动一位,为新元素腾出空间。
  3. 将新元素放入 pos 位置。
  4. 数组长度增加 1。

代码示例

#include <iostream>
using namespace std;

const int MAX_SIZE = 100;

void insertElement(int arr[], int& size, int element, int pos) {
    for (int i = size; i > pos; i--) {
        arr[i] = arr[i - 1];
    }
    arr[pos] = element;
    size++;
}

int main() {
    int arr[MAX_SIZE] = {1, 2, 3, 4, 5};
    int size = 5;

    int elementToInsert = 6;
    int positionToInsert = 2;

    insertElement(arr, size, elementToInsert, positionToInsert);

    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }

    return 0;
}

二、数组元素的删除

作用
从数组中移除指定位置的元素,改变数组元素的排列。

用法步骤

  1. 明确要删除元素的下标 pos
  2. pos + 1 开始,将其后的元素依次向前移动一位,覆盖要删除的元素。
  3. 数组长度减少 1。

代码示例

#include <iostream>
using namespace std;

const int MAX_SIZE = 100;

void deleteElement(int arr[], int& size, int pos) {
    for (int i = pos; i < size - 1; i++) {
        arr[i] = arr[i + 1];
    }
    size--;
}

int main() {
    int arr[MAX_SIZE] = {1, 2, 3, 4, 5};
    int size = 5;

    int positionToDelete = 1;

    deleteElement(arr, size, positionToDelete);

    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }

    return 0;
}

三、数组区间反转

作用
将数组中指定区间内的元素顺序进行翻转,实现元素位置的对调。

用法步骤

  1. 设定两个指针,分别指向要反转区间的起始位置和结束位置。
  2. 交换这两个指针所指向的元素。
  3. 两个指针分别向区间内部移动一位。
  4. 重复上述交换和移动操作,直到两个指针相遇或者交错。

代码示例

#include <iostream>
using namespace std;

void reverseArray(int arr[], int start, int end) {
    while (start < end) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int start = 2, end = 6;

    reverseArray(arr, start, end);

    // 输出反转后的数组
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
        cout << arr[i] << " ";
    }

    return 0;
}

四、前缀和数组

作用
通过对原数组元素的逐步累加,构建一个新的数组,用于快速计算原数组中任意区间内元素的总和。

用法步骤

  1. 创建一个与原数组长度相同的新数组,用于存储前缀和。
  2. 将新数组的第一个元素初始化为原数组的第一个元素。
  3. 从原数组的第二个元素开始,新数组中每个位置的值等于当前位置在原数组中的元素与前一个位置在前缀和数组中的值相加。

代码示例

#include <iostream>
using namespace std;

void buildPrefixSum(int arr[], int prefixSum[], int size) {
    prefixSum[0] = arr[0];
    for (int i = 1; i < size; i++) {
        prefixSum[i] = prefixSum[i - 1] + arr[i];
    }
}

int main() {
    int arr[] = {1, 3, 5, 7, 9};
    int prefixSum[5];
    int size = sizeof(arr) / sizeof(arr[0]);

    buildPrefixSum(arr, prefixSum, size);

五、一维数组的进阶玩法

  1. 动态数组
    通过 newdelete 操作符在运行时动态分配和释放内存来创建数组。
int* arr = new int[5];  // 动态分配一个包含 5 个整数的数组
delete[] arr;  // 释放内存
  1. 数组作为函数参数
  • 传递数组名(实际上是传递数组的指针):
void func(int arr[], int size) {
    // 函数体
}
  • 传递指向数组的指针:
void func(int (*arr)[5]) {
    // 函数体
}
  1. 数组的排序
    使用标准库的 sort 函数对数组进行排序。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    int n = sizeof(arr) / sizeof(arr[0]);

    sort(arr, arr + n);

    for (int num : arr) {
        cout << num << " ";
    }

    return 0;
}
  1. 多维数组模拟
    虽然是一维数组,但可以通过计算索引来模拟多维数组的行为。
int row = 3, col = 4;
int* arr = new int[row * col];

// 访问元素
arr[2 * col + 3]  // 相当于第 3 行第 4 列的元素

(有问题的话请大佬告知我)

(内心:我想要勋章(っ °Д °;)っ)

© 2024 本内容版权归梅耀元所有,未经授权请勿转载。

  • 文章有帮助
  • 文章无帮助
0 投票人
6 个赞

讲得好

1 个赞

谢谢:blush:

3 个赞

GOOD

1 个赞

一维数组进阶可以换个帖子放,有些才语法的可能看不懂

2 个赞

不错,有帮助!

嗯,知道了,但是不想搞(;´д`)ゞ

1 个赞

哈哈哈,我等下给你做个补充,等下发帖子时记得给我解决方案

1 个赞

来的挺早嘛

这已经是比较好的写法了,若dalao有更好的写法,请私聊我会改正

1 个赞

一维数组的新大陆

2 个赞