C实现数组

作者: 简简简简简书 | 来源:发表于2017-05-02 15:01 被阅读17次
//定义了一个数据类型(数组)

typedef struct array
{
    int *pBase;//存储的是数组第一个元素的地址
    int len;//数组所能容纳的最大元素的个数
    int count;//数组当前有效元素的个数
//    int increment;//自动增长因子(暂时不考虑)
}Arr;
void init_arr(Arr *array,int length);
void add_element_arr(Arr *array,int val);
void insert_element_arr(Arr *array,int index,int val);
void delete_element_arr(Arr *array,int index,int *val);//删除的元素用指针实现接收
void get_element_arr(Arr *array,int index);
void show_arr(Arr *array);//输出数组
bool isEmpty(Arr *array);//是不是空的
bool isFull(Arr *array);//是不是满的
void sort_arr(Arr *array);//排序
void inversion_arr(Arr *array);//倒序

int main(int argc, const char * argv[]) {
    Arr array;
    init_arr(&array,10);
    
    add_element_arr(&array, 11);
    add_element_arr(&array, 33);
    add_element_arr(&array, 22);
    add_element_arr(&array, 55);
    add_element_arr(&array, 44);
    
    
//    insert_element_arr(&array, 1, 99);
//    
//    int val ;
//    delete_element_arr(&array,1, &val);
//    printf("删除元素%d\n",val);
    
//    inversion_arr(&array);
    
    sort_arr(&array);
    
    
//    printf("%p\n%d\n%d\n",array.pBase,array.len,array.count);
    show_arr(&array);
    return 0;
}
//初始化
void init_arr(Arr *array,int length)
{
    array->pBase = (int *)malloc(sizeof(Arr) * length);
    if (array->pBase == NULL) {
        printf("动态内存分配失败");
        exit(-1);//终止程序
    }else
    {
        array->len = length;
        array->count = 0;
    }
    return;
}
//是不是空的
bool isEmpty(Arr *array)
{
    if (array->count == 0) {
        return true;
    }else
    {
           return false;
    }
}
//是不是满
bool isFull(Arr *array)
{
    if (array->len == array->count) {
        return true;
    }else
    {
        return false;
    }
}
//输出数组
void show_arr(Arr *array)
{
    if (isEmpty(array)) {
        //数组为空
        printf("数组为空");
    }else
    {
        for (int i = 0; i < array->count; i++) {
            printf("%d\n", array->pBase[i]);
        }
    }
}
//添加元素
void add_element_arr(Arr *array,int val)
{
    if (isFull(array)) {
        printf("数组已经满了");
    }else
    {
        array->pBase[array->count] = val;
         ++array->count;
    }
}
//插入数组
void insert_element_arr(Arr *array,int index,int val)
{
    if (isFull(array)) {
        printf("数组已满");
        return;
    }
    
    if (index < 1 || index > array->count + 1) {
        printf("插入索引错误");
        return;
    }
    
    for (int i = array->count - 1; i >= index - 1; i--) {
        array->pBase[i + 1] = array->pBase[i];
    }
    array->count ++;
    array->pBase[index - 1] = val;
}
//删除元素
void delete_element_arr(Arr *array,int index,int *val)
{
    if (isEmpty(array)) {
        printf("数组为空,不能删除");
    }
    
    if (index < 1 || index > array->count) {
        printf("删除索引错误");
    }
    
    *val = array->pBase[index - 1];
    
    for (int i = index; i < array->count; ++i) {
        array->pBase[i - 1] = array->pBase[i];
    }
    array->count--;
}
//倒序
void inversion_arr(Arr *array)
{
    int i = 0;
    int j = array->count - 1;
    int temp;
    
    while (i < j) {
        temp = array->pBase[i];
        array->pBase[i] = array->pBase[j];
        array->pBase[j] = temp;
        ++i;
        --j;
    }
}
//排序(冒泡)
void sort_arr(Arr *array)
{
    bool isSort = true;
    for (int i = 0; i < array->count - 1 && isSort; i++) {
        isSort = false;
        for (int j = 0; j < array->count - i- 1 ; j++) {
            if (array->pBase[j] > array->pBase[j + 1]) {
                isSort = true;
                int  temp = array->pBase[j + 1];
                array->pBase[j + 1] = array->pBase[j];
                array->pBase[j] = temp;
            }
        }
    }
}

demo地址

相关文章

网友评论

    本文标题:C实现数组

    本文链接:https://www.haomeiwen.com/subject/pxwctxtx.html