连续存储数组操作

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


struct Array {
    int * pBase;
    int length;
    int current;
};

void initArray(struct Array * pArray, int length);
void showArray(struct Array * pArray);
bool is_empty(struct Array * pArray);
bool append_array(struct Array * pArray, int value);
bool insert_array(struct Array * pArray, int position, int value);
bool delete_array(struct Array * pArray, int position, int * val);
void inversion_array(struct Array * pArray);

int main (void) {
    
    struct Array array;
    int val;
    initArray(&array, 6);
    
    append_array(&array, 1);
    append_array(&array, 2);
    append_array(&array, 3);
    append_array(&array, 4);

//    insert_array(&array, 2, 88);
//
//    if ( delete_array(&array, 2, &val) ) {
//        printf("删除成功
");
//        printf("删除的元素是: %d
", val);
//
//    }
    
    inversion_array(&array);
    showArray(&array);

    
    return 0;
}

/** 创建数组*/
void initArray(struct Array * pArray, int length) {
    
    pArray->pBase = (int *)malloc(sizeof(int) * length);
    if (pArray->pBase == NULL) {
        printf("分配内存失败!!!");
        exit(-1);
    }else{
        pArray->length = length;
        pArray->current = 0;
    }
    
}

/** 判断是否为空*/
bool is_empty(struct Array * pArray) {
    
    if (pArray->current == 0) {
        return true;
    }else{
        return false;
    }
}

/** 打印数组*/
void showArray(struct Array * pArray) {
    if (is_empty(pArray)) {
        printf("数组为空
");
    }else{
        for (int i=0; i<pArray->current; i++) {
            printf("%d
", pArray->pBase[i]);
            
        }
    }
}

bool append_array(struct Array * pArray, int value) {
    
    if (pArray->current == pArray->length) {
        return false;
    }
    
    pArray->pBase[pArray->current] = value;
    pArray->current++;
    return true;
}


/** 插入*/
bool insert_array(struct Array * pArray, int position, int value) {
    
    if (position < 1 || position > pArray->current + 1) {
        return false;
    }
    
    for (int i = pArray->current - 1; i >= position - 1; i--) {
        pArray->pBase[i+1] = pArray->pBase[i];
        
    }
    
    pArray->pBase[position-1] = value;
    pArray->current++;
    
    return true;
}

/** 删除*/
bool delete_array(struct Array * pArray, int position, int * val) {
    
    if (position < 1 || position > pArray->current || is_empty(pArray)) {
        return false;
    }
    
    *val = pArray->pBase[position-1];
    for (int i=position; i < pArray->current; i++) {
        pArray->pBase[i-1] = pArray->pBase[i];
    }
    
    pArray->current--;
    
    return true;
}

/** 倒置*/
void inversion_array(struct Array * pArray) {
    int i = 0;
    int j = pArray->current-1;
    int t;
    while (i < j) {
        
        t = pArray->pBase[i];
        pArray->pBase[i] = pArray->pBase[j];
        pArray->pBase[j] = t;
        i++;
        j--;
    }
    return;
}
原文地址:https://www.cnblogs.com/jiefangzhe/p/10766528.html