编辑代码

#include <stdio.h>
#include <malloc.h> //malloch函数
#include <stdlib.h>//exit函数 
#include <stdbool.h>

//定义一个数据类型,该类型的名称叫做 struct Arr,该数据类型定义了三个成员,分别是pBase len cnt
struct Arr
{
    int *pBase;//存储的是数组的第一个元素的地址
    int len;//存储的是该数组所能存储的最大元素数量
    int cnt;//存储的是该数组所存储的有效值数量
};

//函数申明区域
bool append_arr(struct Arr*pArr,int val);//追加
bool insert_arr(struct Arr*pArr,int pos,int val);//插入
void init_arr(struct Arr*pArr,int length);//初始化数组(数组地址,数组长度)
bool delet_arr(struct Arr*pArr,int pos,int * pval);//删除数组元素()
bool get_arr();//获取元素的值
bool is_full(struct Arr*pArr);//判断数组是满的
bool is_empty(struct Arr*pArr);//判断数组是空的
void sotr_arr(struct Arr*pArr);//数组排序
void show_arr(struct Arr*pArr);//输出
void innversion_arr(struct Arr*pArr);//倒置

//主函数运行区域
int main (void) 
{
    struct Arr arr;
    int len=6;
    int val;
    int posi=2;
    init_arr(&arr,len);//调用初始化
    append_arr(&arr,1);
    append_arr(&arr,3);
    append_arr(&arr,6);
    append_arr(&arr,98);
    append_arr(&arr,90);
    insert_arr(&arr,2,10);
    show_arr(&arr);
    insert_arr(&arr,1,100);
    delet_arr(&arr,2,&posi);
    sotr_arr(&arr);
    show_arr(&arr);
    innversion_arr(&arr);
    show_arr(&arr);
    return 0;
}  

//各函数模块区域

//初始化数组
void init_arr(struct Arr*pArr,int length)
{
    pArr->pBase = (int*)malloc(sizeof(int)*length) ;
    if(NULL==pArr->pBase)
    {
        printf("动态内存分配失败!\n");
        exit(-1);
    }
    else
    {
        printf("动态数组分配成功!\n");
        pArr->len=length; //把数组中能储存元素的最大个数
        pArr->cnt=0; //数组中有效值个数为0
    }
    return;

}

//判空
bool is_empty(struct Arr*pArr)
{
    if(0==pArr->cnt)
    return true;
    else
    return false;
}

//输出
void show_arr(struct Arr*pArr)
{
    if(is_empty(pArr))
    {
        printf("数组为空\n");
    }
    else
    {
        for(int i=0;i<pArr->cnt;++i)
        {
            printf("%d",pArr->pBase[i]);
            printf("\n");
        }
    }
    printf("\n"); 
}

//判满
bool is_full(struct Arr*pArr)
{
    if(pArr->cnt==pArr->len)
    return true;
    else
    return false;
}

//追加
bool append_arr(struct Arr*pArr,int val)
{
    if(is_full(pArr))
        return false;
        pArr->pBase[pArr->cnt]=val;//形参 pArr 表示的是需要插入元素在成员pArr中的地址
        (pArr->cnt)++;
        return true;
}

//插入
bool insert_arr(struct Arr*pArr,int pos,int val)
{
    int i;
    if(is_full(pArr))
    return false;
    if(pos<1||pos>pArr->cnt+1)
    return false;
    
    for(i=pArr->cnt-1;i>=pos-1;--i)
    {
        pArr->pBase[i+1]=pArr->pBase[i];
    }
    pArr->pBase[pos-1]=val;
    pArr->cnt++;

    return true;
}

//删除
bool delet_arr(struct Arr * pArr,int pos,int * pval)
{
    int i;
    if(is_full(pArr))
    return false;
    if(pos<1||pos>pArr->cnt)
    return false;

    *pval=pArr->pBase[pos-1];
    for(i=pos;i<pArr->cnt;++i)
    {
        pArr->pBase[i-1]=pArr->pBase[i];
    }
        pArr->cnt--;
        return true;
}

//倒置
void innversion_arr(struct Arr*pArr)
{
    int i=0;
    int j=pArr->cnt-1;
    int t;

    while(i<j)
    {
        t=pArr->pBase[i];
        pArr->pBase[i]=pArr->pBase[j];
        pArr->pBase[j]=t;
        ++i;
        --j;
    }
    return;
}

//排序
void sotr_arr(struct Arr*pArr)
{
    int i,j,t;
    for(i=0;i<pArr->cnt;++i)
    {
        for(j=i+1;j<pArr->cnt;++j)
        {
            if(pArr->pBase[i]>pArr->pBase[j])
            {
                t=pArr->pBase[i];
                pArr->pBase[i]=pArr->pBase[j];
                pArr->pBase[j]=t;
            }
        }
    }
}