C/C++顺序数据结构——动态数组测试
这是一篇顺序表数据结构——动态数组的测试,
实现
//初始化数组
//插入
//根据位置删除
//根据值删除
//查找
//打印
//释放动态数组的内存
//清空数组
//获得动态数组容量
//获得动态数组当前元素个数
//根据位置获得某个位置的元素
话不多说 上代码!!!
//DynamicArray.h
#pragma once #ifndef DynamicArray typedef struct DynamicArray { int size;//当前数组有多少个元素 int capacity; //数组的容量 int *pArray; //数据存放的地址 }DynamicArray; //初始化数组 DynamicArray *Init_Array(); //插入 void Add_Array(DynamicArray *arr, int value); //根据位置删除 void Delete_BY_ArrayPosition(DynamicArray *arr, int pos); //根据值删除 void Delete_BY_ArrayValude(DynamicArray *arr, int value); //查找 int Select_Array(DynamicArray *arr, int value); //打印 int Print_Array(DynamicArray *arr); //释放动态数组的内存 void Free_Array_space(DynamicArray *arr); //清空数组 void Clear_Array(DynamicArray *arr); //获得动态数组容量 int Get_Array_Capacity(DynamicArray *arr); //获得动态数组当前元素个数 int Get_Number_Of_DynamicArray(DynamicArray *arr); //根据位置获得某个位置的元素 int Get_Element_Of_DynamicArray(DynamicArray *arr, int pos); #endif // !DynamicArray
#include"DynamicArray.h" #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> /*typedef struct DynamicArray { int size;//当前数组有多少个元素 int capacity; //数组的容量 int *pArray; //数据存放的地址 }DynamicArray;*/ //初始化动态数组 DynamicArray *Init_Array() { //申请内存 DynamicArray *pAddr = (DynamicArray *)malloc(sizeof(DynamicArray)); pAddr->capacity = 20; pAddr->size = 0; pAddr->pArray = (int *)malloc(pAddr->capacity * sizeof(int)); return pAddr; } //插入 void Add_Array(DynamicArray *arr, int value) { if (arr == NULL) { printf("arr == NULL"); return; } //判断空间是否足够 //if (arr->size > arr->capacity) if (arr->size == arr->capacity) { //开辟一个更大的空间 int *newspace = (int *)malloc((arr->capacity * 2) * sizeof(int)); //把旧空间的数组内容拷贝到新空间 memcpy(newspace, arr->pArray, arr->capacity*sizeof(int)); //释放旧空间 free(arr->pArray); arr->pArray = newspace; //更新capacity arr->capacity = arr->capacity * 2; } //插入新元素 arr->pArray[arr->size] = value; arr->size++; } //根据位置删除 void Delete_BY_ArrayPosition(DynamicArray *arr, int pos) { if (arr == NULL) { printf("arr == NULL"); return; } if (pos < 0 || pos > arr->size) { printf("pos < 0 || pos > arr->size"); return; } for (int i=pos ; i <= arr->size-1; i++) { arr->pArray[i-1] = arr->pArray[i]; } arr->size--; } //根据值删除 void Delete_BY_ArrayValude(DynamicArray *arr, int value) { if (arr == NULL) { printf("arr == NULL"); return; } int i,pos; for (i = 0; i < arr->size; i++) { if (arr->pArray[i] == value) { pos = i; break; } } Delete_BY_ArrayPosition(arr,pos+1); } //查找,返回元素的位置 int Select_Array(DynamicArray *arr, int value) { if (arr == NULL) { printf("arr == NULL"); return -1; } int i, pos; for (i = 0; i < arr->size; i++) { if (arr->pArray[i] == value) { pos = i; break; } } return pos; } //打印 int Print_Array(DynamicArray *arr) { if (arr == NULL) { printf("arr == NULL"); return -1; } for (int i = 0; i < arr->size; i++) { printf("%d ", arr->pArray[i]); } printf("\n"); return 0; } //释放动态数组的内存 void Free_Array_space(DynamicArray *arr) { if (arr == NULL) { printf("arr == NULL"); return; } if (arr->pArray != NULL) { free(arr->pArray); } free(arr); } //清空数组的个数统计size void Clear_Array(DynamicArray *arr) { if (arr == NULL) { printf("arr == NULL"); return; } arr->size = 0; } //获得动态数组容量 int Get_Array_Capacity(DynamicArray *arr) { if (arr == NULL) { printf("Get_Array_Capacity error"); return -1; } return arr->capacity; } //获得动态数组当前元素个数 int Get_Number_Of_DynamicArray(DynamicArray *arr) { if (arr == NULL) { printf("Get_Number_Of_DynamicArray error"); return -1; } return arr->size; } //根据位置获得某个位置的元素 int Get_Element_Of_DynamicArray(DynamicArray *arr,int pos) { if (arr == NULL) { printf("Get_Element_Of_DynamicArray error"); } return arr->pArray[pos-1]; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include"DynamicArray.h" void test01() { //初始化动态数组 DynamicArray*My_Array = Init_Array(); //打印数组容量 printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array)); //打印当前数组元素个数 printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array)); printf("Enter DynamicArray Size\n"); int number; scanf("%d", &number); //插入元素 for (int i = 0; i < number; i++) { Add_Array(My_Array, i); } //打印数组容量 printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array)); //打印当前数组元素个数 printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array)); //打印 Print_Array(My_Array); printf("Enter the posion what you want to delete\n"); int posion; scanf("%d",&posion); Delete_BY_ArrayPosition(My_Array, posion); //打印数组容量 printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array)); //打印当前数组元素个数 printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array)); //打印 Print_Array(My_Array); printf("Enter the value what you want to delete\n"); int value; scanf("%d", &value); Delete_BY_ArrayValude(My_Array, value); //打印数组容量 printf("DynamicArray's capacity is %d\n", Get_Array_Capacity(My_Array)); //打印当前数组元素个数 printf("The number Of DynamicArray is %d\n", Get_Number_Of_DynamicArray(My_Array)); //打印 Print_Array(My_Array); //根据位置获得某个位置的元素 printf("Enter a position to get the element\n "); int posion1; scanf("%d", &posion1); printf("The element is %d", Get_Element_Of_DynamicArray(My_Array, posion1)); //销毁 Free_Array_space(My_Array); } int main(void) { test01(); printf("\n"); system("pause"); return 0; }
版权声明:本文为ZhuJD原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。