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

 

//DynamicArray.c

#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];
}

//DynamicArrayMain.c

#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 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ZhuJD/p/11826171.html