18 数组基本操作

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>       //exit 函数需要
typedef struct arr
{
    char* arr_name;
    int len;            //当前数组长度
    int maxlen;
}*PARR,ARR;               //PARR ==struct arr *  ,       ARR==struct arr

void init_arr(PARR array, int length);       //初始化数组
void show_arr(PARR array);                  //显示数组 
bool is_empty(PARR array);                    // 判断是否空
bool is_full(PARR array);                     // 判断是否满
int get_arr(PARR array, int  num);        //获得小标下标为num 的数组内容
bool append_arr(PARR array, int num);    //数组尾部追加一个元素
bool insert_arr(PARR arr, int x, int num);   //x 为插入的数,num为插入为值的下标
bool delete_arr_num(PARR array, int num); //根据下标删除一个元素
bool delete_arr_x(PARR array, int x);       //根据值删除一个一个元素
void sort_arr(PARR array);                 //排序小到大
void inversion_arrr(PARR array);   // 倒叙排列



main()
{
    struct arr array;

    // 测试程序:
    init_arr(&array, 10);
    //append_arr(&array, 3);
    //append_arr(&array, 2);
    //append_arr(&array, 1);
    //insert_arr(&array, 0, 3);   // 前面前面为数,后面为序号
    //sort_arr(&array);
    //inversion_arrr(&array);
    //delete_arr_num(&array, 0);
    //delete_arr_x(&array, 3);
    //get_arr(&array, 0);
    //show_arr(&array);

}
//参数length 用户指定的数组长度
void init_arr(PARR ar, int length) {

    ar->arr_name = malloc(sizeof(int));
    if (ar->arr_name == NULL)
    {
        printf(" malloc memory error!!");
        exit(-1);
    }
    else {
        ar->maxlen = length;
        ar->len = 0;
    }

}

void show_arr(PARR ar) {
    int i;
    printf("array lenth is %d \n", ar->len);
    printf("array:    ");

    if (is_empty(ar)) {
        printf(" array is empty!!");
    }
    else
        for (i = 0; i < ar->len; i++)
            printf("%d ", ar->arr_name[i]);
}

bool is_empty(PARR ar)
{
    if (ar->len == 0)
        return true;
    else
        return false;
}

bool is_full(PARR ar) {
    if (ar->len == ar->maxlen)
        return true;
    else
        return false;
}

//x 为增加的数组元素值
bool append_arr(PARR ar, int x) {
    bool app = false;
    if (is_full(ar))
    {
        printf("array is full !");
    }
    else {
        ar->arr_name[ar->len] = x;
        ar->len++;
        app = true;
    }
    return app;
}

int get_arr(PARR arr, int  num) {
    if (num > arr->len)
        printf("the number is too big!");
    else
        return arr->arr_name[num];
    //printf("array[%d] = %d ", num, arr->arr_name[num]);
}

bool insert_arr(PARR arr, int x, int num) {
    bool ins = true;
    int i;
    if (num > arr->len) {
        ins = false;
        printf("number is too large !\n");
    }
    else if (num == (arr->len)) {
        arr->arr_name[arr->len] = x;
        arr->len += 1;
    }
    else {
        for (i = (arr->len); i >= num; i--)
            arr->arr_name[i] = arr->arr_name[i - 1];
        arr->len += 1;
        arr->arr_name[num] = x;

    }
    return ins;
}
bool delete_arr_num(PARR arr, int num) {
    int i;
    bool del = true;
    if (is_empty(arr)) {
        printf("array is empty!");
        del = false;
    }
    else if (num > arr->len - 1) {
        printf("number is too large !\n");
        del = false;
    }
    else if (num == arr->len - 1)
        arr->len -= 1;
    else
        for (i = num; i < arr->len - 1; i++)
            arr->arr_name[i] = arr->arr_name[i + 1];
    arr->len -= 1;
    return del;
}

bool delete_arr_x(PARR arr, int x) {
    bool del = true;
    int i;   //查找 循环查找x
    int j;  //循环删除x
    for (i = 0; i < arr->len - 1; i++) {
        if (x == arr->arr_name[i])
        {
            for (j = i; j < arr->len - 1; j++)
                arr->arr_name[j] = arr->arr_name[j + 1];
            arr->len -= 1;
        }

        else if (x == arr->arr_name[arr->len - 1])
            arr->len -= 1;
        else
            del = false;
    }
    return del;
}
void sort_arr(PARR arr) {
    int i, j = 0;
    int temp;
    for (i = 0; i < arr->len; i++)
        for (j = i + 1; j < arr->len; j++)
            if (arr->arr_name[i] > arr->arr_name[j])
            {
                temp = arr->arr_name[i];
                arr->arr_name[i] = arr->arr_name[j];
                arr->arr_name[j] = temp;
            }
}

void inversion_arrr(PARR arr) {
    int i = 0, j = arr->len - 1;
    int temp;
    while (i < j) {
        temp = arr->arr_name[i];
        arr->arr_name[i] = arr->arr_name[j];
        arr->arr_name[j] = temp;
        i++;
        j--;
    }
}

 

posted @ 2020-05-31 23:32  abel2020  阅读(180)  评论(0编辑  收藏  举报