数据结构之C语言模拟整数数组实现

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


typedef
struct Arr {
    int *pBase; //数组第一个元素地址
    int len;    //数组长度
    int cnt;    //当前有效元素数量
} Array;


void init_array(Array *, int); //初始化数组

void show_array(Array *); //遍历打印数组

bool is_empty(Array *);   //判断数组是否空

bool insert_array(Array *, int pos, int); //插入元素 pos表示在第几个元素前面插入

bool append_array(Array *, int); //添加元素

bool del_array(Array *, int pos, int * val); //删除第几个元素

bool is_full(Array *); //判断数组是否已满

void sort_arr(Array * pArr); //默认升序

void inversion_arr(struct Arr * pArr);//反转数组

int main() {
    Array a;
    init_array(&a, 10);

    append_array(&a, 0);
    append_array(&a, 1);
    append_array(&a, 2);
    append_array(&a, 3);
    append_array(&a, 4);
    append_array(&a, 5);

    inversion_arr(&a);

    show_array(&a);


    getchar();
    free((&a)->pBase);
}


void inversion_arr(struct Arr * pArr){
    int i = 0;
    int j = pArr->cnt-1;
    int temp = 0;

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

}


void sort_arr(Array * pArr){

    int temp = 0;

    for (int i = 0; i < pArr->cnt; i++){
        for (int j = 0; j < pArr->cnt-1 - i; j++){
            if (pArr->pBase[j] > pArr->pBase[j + 1]) {
                temp = pArr->pBase[j];
                pArr->pBase[j] = pArr->pBase[j + 1];
                pArr->pBase[j + 1] = temp;
            }
        }
    }
}


bool del_array(Array * arr, int pos, int * val){
    if (is_empty(arr)) {
        printf("array is empty\n");
        return false;
    }

    if (pos < 1 || pos>arr->cnt){
        printf("position is error \n");
        return false;
    }

    *val = arr->pBase[pos - 1];

    for (int i = pos; i < arr->cnt; i++) {
        arr->pBase[i - 1] = arr->pBase[i];
    }

    arr->cnt--;
    return true;



}


bool append_array(Array * arr, int val){
    if (is_full(arr)){
        printf("array is full");
        return false;
    }
    arr->pBase[arr->cnt] = val;
    arr->cnt++;
    return true;
}

bool is_full(Array *arr) {
    return arr->cnt == arr->len;
}

bool insert_array(Array *arr, int pos, int val) {
    if (is_full(arr)) {
        printf("array is full");
        return false;
    }

    if (pos < 1 || pos > arr->cnt + 1) {
        printf("position is error\n");
        return false;
    }

    for (int i = arr->cnt; i >= pos - 1; i--) {
        arr->pBase[i] = arr->pBase[i - 1];
    }
    arr->pBase[pos - 1] = val;
    arr->cnt++;

    return true;

}


void init_array(Array *arr, int len) {
    arr->pBase = (int *)malloc(sizeof(int) * len);
    if (NULL == arr->pBase) {
        printf("内存分配失败");
        exit(-1);
    }
    else {
        arr->cnt = 0;
        arr->len = len;
    }
}

bool is_empty(Array *arr) {
    return 0 == arr->cnt;
}

void show_array(Array *arr) {
    if (is_empty(arr)) {
        printf("数组为空不能打印");
    }
    else {
        for (int i = 0; i < arr->cnt; i++) {
            printf("%d ", arr->pBase[i]);
        }
    }
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。