数据结构基本操作_「数据结构1」-数组的基本操作

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

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

610f4c886a4c035b1aca35e57c1bdf75.png
  • 定义一个返回值为结构体类型的指针函数,动态创建一个指定大小的数组
e8db8d67587bfa2e573fc84ee62f4c40.png
  • 数组的拷贝
c0ec9f26d90e5ea79d74539b480607cc.png
  • 数组的打印
f2f34a13be6260dfff1c3ffbae615ec0.png
  • 改变数组特定位置的数值,该位为0的情况下
b3be0d3361fa896dfa86d49ebe1e755a.png
  • 数组特定位置清0
c44d969742e81d087afabc70b6d372e1.png
  • 给数组中的第一个为0的位,置特定的数值
fd32e7224549c21de415c3af48080d60.png
  • 更新数组中特定位置的数值
0a4630aadd572e94d7bc09ae119d2d1d.png
  • 清空数组,置0
76f2463f360299349f7f071d196a1cae.png
  • 交换数组两个位置的数据
a150f7de3f3df4581b100ac01a588bd2.png
  • 交换数组两个位置的数据
9d659c958c6063d3843ea14d4c155d6a.png
  • 数组的反转
160dc237f2f628bc45ce3b7db8b09f8d.png
  • 冒泡排序 从小到大
5df78387669bb255d287f7e3a640897e.png
  • 选择排序 从小到大
2539fa24664db3c7a89e50f6c3afef7c.png
  • 插入排序 从小到大
b3a054e2a26be537bd21d00eaa42f09a.png
  • 随机排序
d736204976e187fab0ebf4357a89d837.png
  • 判断数组里面的某一个数出现了几次
b341c6329b159a46959548a2313c0a23.png
  • 判断数组里面的某一个数在数组里面出现的位置,并将下标存在一个新的数组里面
b67edd792d0c18ed17538fca273d8eda.png
  • 找数组里面的最大值
3447db75e9758d9b1c3eb025ec40e08a.png
  • 找数组里面的最小值
f43eee9ba7ac958c61aab7dd152eeaa3.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、付费专栏及课程。

余额充值