概述
数组是最基本的数据结构,掌握它的基本操作是必须的,下面来看看基本的几类操作。
定义一个结构体,用于存放数组的首地址和长度

- 定义一个返回值为结构体类型的指针函数,动态创建一个指定大小的数组

- 数组的拷贝

- 数组的打印

- 改变数组特定位置的数值,该位为0的情况下

- 数组特定位置清0

- 给数组中的第一个为0的位,置特定的数值

- 更新数组中特定位置的数值

- 清空数组,置0

- 交换数组两个位置的数据

- 交换数组两个位置的数据

- 数组的反转

- 冒泡排序 从小到大

- 选择排序 从小到大

- 插入排序 从小到大

- 随机排序

- 判断数组里面的某一个数出现了几次

- 判断数组里面的某一个数在数组里面出现的位置,并将下标存在一个新的数组里面

- 找数组里面的最大值

- 找数组里面的最小值

源码如下:
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;}
最后
以上就是忧伤金鱼为你收集整理的数据结构基本操作_「数据结构1」-数组的基本操作的全部内容,希望文章能够帮你解决数据结构基本操作_「数据结构1」-数组的基本操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复