c++ 数组置0_「数据结构1」-数组的基本操作

本文介绍了C++中数组的基本操作,包括定义结构体存储数组信息、动态创建数组、拷贝、打印、置零、赋值、清空、交换元素、排序以及查找元素的方法。示例代码涵盖冒泡、选择和插入排序等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组是最基本的数据结构,掌握它的基本操作是必须的,下面来看看基本的几类操作。

定义一个结构体,用于存放数组的首地址和长度

bf56fc836c75e8227a3acb91a7f0b5da.png
  • 定义一个返回值为结构体类型的指针函数,动态创建一个指定大小的数组
04efe1838e68365133955cba2585a274.png
  • 数组的拷贝
ebe3889182f2231e543281b9c4eb7138.png
  • 数组的打印
b48660ad2bdccbff39d387d270530158.png
  • 改变数组特定位置的数值,该位为0的情况下
89ecb177ab1ad79aa3cdbd88936a27c4.png
  • 数组特定位置清0
156c4e369ba2539c425319b0e7db02a3.png
  • 给数组中的第一个为0的位,置特定的数值
66acaf6d87d34bb304f7249d7112039d.png
  • 更新数组中特定位置的数值
b031305c0a9c3ca9b333cc534247034f.png
  • 清空数组,置0
0d9d5bdfc8f1ecf141650494a7d00156.png
  • 交换数组两个位置的数据
fefd40dce4fa4a6aef1bcc81f345df89.png
  • 交换数组两个位置的数据
2e4956da8f376278002ca0e4e83b29be.png
  • 数组的反转
f5070a1db5b9b86cdb33951b4baf1e8c.png
  • 冒泡排序 从小到大
f7c1516e7c6480153e586ebb150dfeb4.png
  • 选择排序 从小到大
36ffe47424e24a7db7d9c2dd95d55fb9.png
  • 插入排序 从小到大
533346d5147ee7917d681cfb964bb70a.png
  • 随机排序
5130b364725b99b2a6bc61de13fe2433.png
  • 判断数组里面的某一个数出现了几次
f3be1702ac3e6ac0301482236ad8b718.png
  • 判断数组里面的某一个数在数组里面出现的位置,并将下标存在一个新的数组里面
c4024cbd26b9c7472f6ea7ebc568b359.png
  • 找数组里面的最大值
02b9fec022ccb791f04ad7e5f7c661f2.png
  • 找数组里面的最小值
8a1f48ac83f523da8f23f14a4493aa14.png

源码如下:

CArray.h

#pragma once#define ARRAY_ERASED -1#define SUCCESS 0#define INVALID_POSITION 1#define POSITION_INIT 2#define POSITION_NOT_INIT 3#define POSITION_EMPTY 4#define ARRAY_FULL 5// 定义一个结构体,用于存放数组的首地址和长度typedef struct CArray {int *array;int size;} CArray;// 获取一个指定大小的数组,动态分配内存空间CArray * getCArray(int size); //数组的拷贝CArray * getCopyCArray(CArray *array);// 数组的打印int displayCArray(CArray *array);// 改变数组特定位置的数值,该位为0的情况下int insertValueCArray(CArray *array, int position, int value);// 数组特定位置清0int removeValueCArray(CArray *array, int position);// 给数组中的第一个为0的位,置特定的数值int pushValueCArray(CArray *array, int value);// 更新数组中特定位置的数值int updateValueCArray(CArray *array, int position, int value);// 清空数组,置0int eraseCArray(CArray *array);// 交换数组两个位置的数据int switchValuesCArray(CArray *array, int position1, int position2);// 数组的反转int reverseCArray(CArray *array);// 交换数组两个位置的数据void swap(CArray *array, int position1, int position2);// 冒泡排序 从小到大int bubbleSortCArray(CArray *array);// 选择排序 从小到大int selectionSortCArray(CArray *array);// 插入排序 从小到大int insertionSortCArray(CArray *array);// 随机排序int blenderCArray(CArray *array);// 判断数组里面的某一个数出现了几次int valueOcurranceCArray(CArray *array, int value);// 判断数组里面的某一个数在数组里面出现的位置,并将下标存在一个新的数组里面CArray * valuePositionsCArray(CArray *array, int value);// 找数组里面的最大值int findMaxCArray(CArray *array);// 找数组里面的最小值int findMinCArray(CArray *array);

CArray.c

#include #include #include #include "CArray.h"// 定义一个返回值为结构体类型的指针函数,动态创建一个指定大小的数组CArray * getCArray(int size){CArray *array = (CArray *)malloc(sizeof(CArray));array->array = (int *)malloc(sizeof(int) * size);array->size = size;int i;for (i = 0; i < size; i++) {array->array[i] = 0;}return array;}// 数组的拷贝CArray * getCopyCArray(CArray *arr){CArray *array = (CArray *)malloc(sizeof(CArray));array->array = (int *)malloc(sizeof(int) * arr->size);array->size = arr->size;int i;for (i = 0; i < arr->size; i++) {array->array[i] = arr->array[i];}return array;//// 获取这个数组里面的值//for (int i = 0; i < 10; i++) //{//printf("%d",*(array->array + 1));//}}// 数组的打印int displayCArray(CArray *array){int i;printf("TEST C ARRAY");for (i = 0; i < array->size; i++) {printf("%d ", array->array[i]);}printf("");return 0;}// 改变数组特定位置的数值,该位为0的情况下int insertValueCArray(CArray *array, int position, int value){if (position >= 0 && position < array->size) {if (array->array[position] == 0) {array->array[position] = value;return SUCCESS;}else return POSITION_INIT;}return INVALID_POSITION;}//数组特定位置清0int removeValueCArray(CArray *array, int position){if (position >= 0 && position < array->size) {if (array->array[position] != 0) {array->array[position] = 0;}else return POSITION_EMPTY;}return INVALID_POSITION;}//给数组中的第一个为0的位,置特定的数值int pushValueCArray(CArray *array, int value){int i;int ok = 0;for (i = 0; i < array->size; i++) {if (array->array[i] == 0) {array->array[i] = value;ok = 1;break;}}if (ok == 1) return SUCCESS;else return ARRAY_FULL;}//更新数组中特定位置的数值int updateValueCArray(CArray *array, int position, int value){if (position >= 0 && position < array->size) {if (array->array[position] != 0) {array->array[position] = value;return SUCCESS;}else return POSITION_NOT_INIT;}return INVALID_POSITION;}// 清空数组,置0int eraseCArray(CArray *array){int i;for (i = 0; i < array->size; i++) {array->array[i] = 0;}return 0;}// 交换数组两个位置的数据int switchValuesCArray(CArray *array, int position1, int position2){if (position1 >= 0 && position1 < array->size && position2 >= 0 && position2 < array->size) {int temp = array->array[position1];array->array[position1] = array->array[position2];array->array[position2] = temp;}return INVALID_POSITION;}// 交换数组两个位置的数据void swap(CArray *array, int position1, int position2){int temp = array->array[position1];array->array[position1] = array->array[position2];array->array[position2] = temp;}// 数组的反转int reverseCArray(CArray *array){int i;for (i = 0; i < array->size / 2; i++) {swap(array, i, array->size - i - 1);}return SUCCESS;}// 冒泡排序 从小到大int bubbleSortCArray(CArray *array){int i, j;for (i = 0; i < array->size - 1; i++) {for (j = 0; j < array->size - i - 1; j++) {if (array->array[j] > array->array[j + 1]) {swap(array, j, j + 1);}}}return 0;}// 选择排序 从小到大int selectionSortCArray(CArray *array){int i, j, min;for (i = 0; i < array->size - 1; i++) {min = i;for (j = i + 1; j < array->size; j++)if (array->array[j] < array->array[min]) min = j;swap(array, min, i);}return 0;}// 插入排序 从小到大int insertionSortCArray(CArray *array){int i, j, num;for (i = 1; i < array->size; i++) {num = array->array[i];j = i - 1;while (j >= 0 && array->array[j] > num){array->array[j + 1] = array->array[j];j--;}array->array[j + 1] = num;}return 0;}// 随机排序int blenderCArray(CArray *array){srand(time(NULL) * array->size);//使用当前时间 * array->size进行随机数发生器的初始化 int i;int total = array->size * 100;for (i = 0; i < total; i++) {swap(array, rand() % array->size, rand() % array->size);}return 0;}// 判断数组里面的某一个数出现了几次int valueOcurranceCArray(CArray *array, int value){int i, total = 0;for (i = 0; i < array->size; i++) {if (array->array[i] == value) total++;}return total;}// 判断数组里面的某一个数在数组里面出现的位置,并将下标存在一个新的数组里面CArray * valuePositionsCArray(CArray *array, int value){int i, j = 0;int total = valueOcurranceCArray(array, value);// 某一个数在数组中的个数CArray *resultArray = getCArray(total);// 创建一个数组,大小为某一个数出现的次数for (i = 0; i < array->size; i++) {if (array->array[i] == value) {// Hopefully this won't overflowresultArray->array[j] = i;j++;}}return resultArray;}// 找数组里面的最大值int findMaxCArray(CArray *array){int i;int max = array->array[0];for (i = 1; i < array->size; i++) {if (array->array[i] > max) {max = array->array[i];}}return max;}// 找数组里面的最小值int findMinCArray(CArray *array){int i;int min = array->array[0];for (i = 1; i < array->size; i++){if (array->array[i] < min) {min = array->array[i];}}return min;}

main.c

#include #include #include "CArray.h"int main(){//创建一个大小为10的数组CArray *array = getCArray(10);displayCArray(array);//测试CArray *arraycopy = getCopyCArray(array);displayCArray(arraycopy);insertValueCArray(arraycopy, 4, 4);displayCArray(arraycopy);removeValueCArray(arraycopy,4);displayCArray(arraycopy);pushValueCArray(arraycopy, 4);displayCArray(arraycopy);insertValueCArray(arraycopy, 4, 6);displayCArray(arraycopy);eraseCArray(arraycopy);displayCArray(arraycopy);insertValueCArray(arraycopy, 4, 4);insertValueCArray(arraycopy, 5, 5);displayCArray(arraycopy);switchValuesCArray(arraycopy, 4, 5);displayCArray(arraycopy);reverseCArray(arraycopy);displayCArray(arraycopy);eraseCArray(arraycopy);insertValueCArray(arraycopy, 0, 2);insertValueCArray(arraycopy, 1, 3);insertValueCArray(arraycopy, 2, 1);insertValueCArray(arraycopy, 3, 10);insertValueCArray(arraycopy, 4, 7);insertValueCArray(arraycopy, 5, 50);insertValueCArray(arraycopy, 6, 18);insertValueCArray(arraycopy, 7, 7);insertValueCArray(arraycopy, 8, 11);insertValueCArray(arraycopy, 9, 8);displayCArray(arraycopy);//bubbleSortCArray(arraycopy);//selectionSortCArray(arraycopy);//insertionSortCArray(arraycopy);//blenderCArray(arraycopy);displayCArray(arraycopy);printf("%d" , valueOcurranceCArray(arraycopy, 7));CArray *array1 = valuePositionsCArray(arraycopy, 7);displayCArray(array1);printf("max is %d", findMaxCArray(arraycopy)); printf("min is %d", findMinCArray(arraycopy));// 用完了之后需要释放这个动态的空间free(array);free(arraycopy);free(array1);return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值