• Arr


    # include<stdio.h>
    # include <malloc.h>
    # include <stdlib.h> // 包含了exit函数

    //定义了数据类型名字叫做 struct Arr
    struct Arr
    {
    int * pBase; //存储的数组第一个元素的地址
    int len; //数组所能容纳有效元素的个数
    int cnt; //当前数组的有效元素个数
    } ;

    void init_arr(struct Arr*pArr, int length);
    bool append_arr(struct Arr*pArr,int val); // 末尾追加 布尔类型 结果为 0或1
    bool insert_arr(struct Arr*pArr,int pos, int val); // pos的值从1开始 代表位置 若pos为 2 则代表在第二个位置前插入 val
    bool delete_arr(struct Arr*pArr,int pos, int *pVal);
    int get();
    bool is_empty(struct Arr * pArr);
    bool is_full(struct Arr*);
    void sort_arr(struct Arr * pArr);
    void show_arr(struct Arr * pArr);
    void inversion_arr(struct Arr*pArr); //倒置

    int main(void)
    {
    struct Arr arr; //arr 是数据变量 init之前数组并没有生成 但是分配了内存
    int val;

    init_arr(&arr,8);
    show_arr(&arr);
    append_arr(&arr, 98);
    append_arr(&arr, 2);
    append_arr(&arr, 3);
    append_arr(&arr,57);
    append_arr(&arr,5);
    append_arr(&arr,6);
    insert_arr(&arr, 2, 99);
    //sort_arr(&arr);
    show_arr(&arr);

    if(delete_arr(&arr,1,&val))
    {
    printf("删除成功 ");
    printf("您删除的元素是: %d ",val);
    }
    else
    {
    printf("删除失败");
    }
    show_arr(&arr);
    inversion_arr(&arr);

    printf("倒置之后的数组内容是: ");
    show_arr(&arr);
    sort_arr(&arr);







    //printf("%d ",arr.len); //所以arr=99



    return 0;
    }
    void init_arr( struct Arr *pArr,int length) //将 arr的值赋给 *pArr
    {
    pArr->pBase = (int *)malloc(sizeof(int) *length); //相当于pARR 这个指针变量指向结构体变量中 pBase这个成员 然后此时分配好了内存 有24 个字节 4*6
    if(NULL ==pArr->pBase)
    {
    printf("动态内存分配失败 ");
    exit(-1);//终止整个程序
    }
    else
    {
    pArr->len =length;
    pArr->cnt =0;
    }
    return;
    //(*pArr).len =99; //所以&pArr= arr 为什么不直接写 arr 是因为直接传送数据 需要加& 所以自己设的一个新变量吗
    }

    bool is_empty(struct Arr * pArr)
    {
    if(0 == pArr->cnt)
    return true;

    else
    return false;
    }

    bool is_full(struct Arr* pArr)
    {
    if(pArr->cnt == pArr->len)
    return true;
    else
    return false;
    }

    void show_arr(struct Arr * pArr)
    {
    if(is_empty(pArr)) // pArr需不需要加&
    {
    printf("数组为空 ");
    }
    else
    {
    for(int i=0; i<pArr->cnt;++i)
    printf("%d ",pArr->pBase[i]); //
    }
    }

    bool append_arr(struct Arr* pArr,int val) //(struct Arr* pArr 这里必须要带上 pArr 上面函数声明 的时候 可以不加
    {
    if(is_full(pArr))
    return false;

    //不满时追加
    pArr->pBase[pArr->cnt] =val;
    (pArr->cnt)++;
    return true;

    }

    bool insert_arr(struct Arr*pArr,int pos, int val)
    {
    int i;


    if(is_full(pArr)) {
    printf("full!");
    return false;
    }


    if(pos<1 || pos>pArr->cnt+1)
    return false;

    for(i =pArr->cnt-1; i>=pos-1; --i)
    {
    pArr->pBase[i+1] =pArr->pBase[i];
    }
    pArr->pBase[pos-1] = val;
    (pArr->cnt)++;
    return true;

    /*
    if (is_full(pArr)) {
    // pArr->pBase = (int *)realloc(pArr->pBase, sizeof(int) * pArr->len+1); //动态扩大内存
    printf("insert failed ");
    return false;
    }
    if (pos<1 || pos>pArr->cnt+1) {
    printf("Invalid argument ");
    return false;
    }
    for (int i = pArr->cnt-1; i >= pos-1; --i) {
    pArr->pBase[i+1] = pArr->pBase[i];
    }
    pArr->pBase[pos-1] = val;
    (pArr->cnt)++;
    printf("Insert successfully ");
    return true;*/
    }

    bool delete_arr(struct Arr*pArr,int pos, int *pVal)
    {
    int i;
    if(is_empty(pArr))
    return false;
    if(pos<1 || pos>pArr->cnt)
    return false;

    *pVal = pArr->pBase[pos-1];
    for(i=pos; i<pArr->cnt; ++i)
    {
    pArr->pBase[i-1]= pArr->pBase[i];
    }
    pArr->cnt--;
    return true;
    }
    void inversion_arr(struct Arr*pArr)
    {
    int i=0;
    int j=pArr->cnt-1;
    int t;

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

    }
    return;
    }

    void sort_arr(struct Arr * pArr)
    {
    int i,j,t;
    for(i =0; i<pArr->cnt;++i)
    {
    for(j=i+1; j<pArr->cnt;++j)
    {
    if(pArr->pBase[i]>pArr->pBase[j])
    {

    t =pArr->pBase[i];
    pArr->pBase[i]=pArr->pBase[j];
    pArr->pBase[j]=t;
    }

    }
    }
    }
    //插入和排序没出来23333 2018.4.14.16点01分

  • 相关阅读:
    鲲鹏服务器测试
    缓存区溢出实验
    读书笔记
    《信息安全系统设计与实现》学习笔记9
    改进ls的实现
    团队作业(四):描述设计
    《需求规格书》修订版
    反汇编测试
    《信息安全系统设计与实现》学习笔记8
    stat命令的实现-mystat
  • 原文地址:https://www.cnblogs.com/9797ch/p/9013503.html
Copyright © 2020-2023  润新知