zoukankan      html  css  js  c++  java
  • 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分

  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/9797ch/p/9013503.html
Copyright © 2011-2022 走看看