结构体,指向数组指针,对数组的增删,排序,遍历算法

#include <stdio.h>
#include <stdlib.h>

typedef struct Arr{
    int *pArray;        //存放一个指向数组的指针
    int cent;           //存放当前数组中有效的个数
    int len;            //存放数组的长度.
}Array,*Parr;

void initArray(Parr,int);   //对数组进行初始化
int append(Parr,int);           //对数组进行附加元素
int insertArray(Parr,int,int);      //插入元素
int IS_full(Parr);                  //判断数组是否已满
void traverseArray(Array);          //对数组进行遍历
int IS_empty(Array);                    //判断数组是否为空
void deleteArray(Parr,int);         //对数组中某个元素进行删除
void inversionArray(Array);         //对数组中元素进行倒置
void sortArray(Array);              //对数组中的元素进行排序

int main(int argc, const char * argv[])
{
    Array arr;
    initArray(&arr,10);
    append(&arr,1);
    append(&arr,8);
    append(&arr,3);
    append(&arr,7);
    append(&arr,9);
    append(&arr,6);
    append(&arr,35);
    append(&arr,4);
    append(&arr,38);

    insertArray(&arr,5,10);//在第X个元素的位置插入元素10;
    deleteArray(&arr,7);//删除第四个元素
    sortArray(arr);
    traverseArray(arr);
    inversionArray(arr);
    traverseArray(arr);
    return 0;
    
}
//对数组进行初始化.
void initArray(Parr parr,int length){
    parr->pArray = (int*)malloc(length*sizeof(int));
    if (NULL == parr->pArray) {
        printf("动态分配内存失败!");
    }
    else{
        parr->len = length;
        parr->cent = 0;
    }
    return;
}
//对数组元素进行添加
int append(Parr parr,int var){
    if (parr->cent == parr->len) {
        printf("附加失败!");
        return 0;
    }
    else{
        parr->pArray[parr->cent] = var;
        parr->cent++;
        return 1;
    }
}
//在数组中得某个位置,进行插入元素
int insertArray(Parr parr,int index,int var){
    int i;
    if(0 == IS_full(parr))
        return 0;
    if (index > parr->cent || index<1) {
        printf("插入元素的位置输入有误!");
        return 0;
    }
    for (i = parr->cent; i>=index; --i) {
        parr->pArray[i] = parr->pArray[i-1];
    }
    parr->pArray[index-1] = var;
    parr->cent++;
    return 0;
}
//判断数组是否已满
int IS_full(Parr parr){
    if (parr->cent == parr->len) {
        printf("数组已满!");
        return 0;
    }
    else
        return 1;
}
//对数组中得各元素进行遍历
void traverseArray(Array arr){
    if(0 ==IS_empty(arr))
        printf("数组为空!");
    else{
        for (int i = 0; i<arr.cent; ++i) {
        printf("%d ",arr.pArray[i]);
        }
        printf("\n");
    }
}
//判断数组是否为空
int IS_empty(Array arr){
    if (0 == arr.cent) {
        printf("该数组为空");
        return 0;
    }
    else
        return 1;
}
//删除数组中某个位置的元素
void deleteArray(Parr parr,int index){
    if(0 ==IS_empty(*parr))
        printf("数组为空!");
    else{
        int i;
        int value = parr->pArray[index-1];
        for (i = index-1; i<parr->cent; ++i) {
            parr->pArray[i] = parr->pArray[i+1];
        }
        parr->cent--;
        printf("删除第%d个元素,值为%d\n",index,value);
    }
}
//对数组中得元素进行倒置
void inversionArray(Array arr){
    int i = 0;
    int j = arr.cent-1;
    int temp = 0;
    while (i<j) {
        temp = arr.pArray[i];
        arr.pArray[i] = arr.pArray[j];
        arr.pArray[j] = temp;
        --j;
        ++i;
    }
}
//对数组中得元素进行排序
void sortArray(Array arr){
    int i,j,t;
    for (i = 0; i<arr.cent; ++i) {
        for (j = 0; j<arr.cent-i-1; ++j) {
            if (arr.pArray[j] > arr.pArray[j+1]) {
                t = arr.pArray[j+1];
                arr.pArray[j+1] = arr.pArray[j];
                arr.pArray[j] = t;
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值