zoukankan      html  css  js  c++  java
  • 数据结构之数组

    数组

    1.什么叫数组
      元素类型相同,大小相等
    2.数组的优缺点
    # include <stdio.h>
    # include <malloc.h>  //包含了malloc函数
    # include <stdlib.h>  //包含了exit函数
    
    //定义了一个数据类型,该数据类型的名字叫做struct Arr, 
    //该数据类型含有三个成员,分别是pBase, len, cnt
    struct Arr
    {
        int * pBase; //存储的是数组第一个元素的地址
        int len; //数组所能容纳的最大元素的个数
        int cnt; //当前数组有效元素的个数
    };
    
    void init_arr(struct Arr * pArr, int length);  //分号不能省
    bool append_arr(struct Arr * pArr, int val); //追加,末尾追加 
    bool insert_arr(struct Arr * pArr, int pos, int val); 
    //pos指的是追加的位置 ,pos的值从1开始,添加到指定位置 
    bool delete_arr(struct Arr * pArr, int pos, int * pVal);//删除  int *pVal实现返回删除的值 
    int get();
    bool is_empty(struct Arr * pArr);//判断是否为空 
    bool is_full(struct Arr * pArr);//判断是否为满 
    void sort_arr(struct Arr * pArr);//排序 
    void show_arr(struct Arr * pArr); //显示输出 
    void inversion_arr(struct Arr * pArr);//倒置 
    
    int main(void)
    {
        struct Arr arr;
        int val;
        
        init_arr(&arr, 6);
        show_arr(&arr);
        append_arr(&arr, 1);
        append_arr(&arr, 10);
        append_arr(&arr, -3);
        append_arr(&arr, 6);
        append_arr(&arr, 88);
        append_arr(&arr, 11);
        if ( delete_arr(&arr, 4, &val) )
        {
            printf("删除成功!
    ");
            printf("您删除的元素是: %d
    ", val);
        }
        else
        {
            printf("删除失败!
    ");
        }
    /*    append_arr(&arr, 2);
        append_arr(&arr, 3);
        append_arr(&arr, 4);
        append_arr(&arr, 5);
        insert_arr(&arr, -1, 99);
        append_arr(&arr, 6);
        append_arr(&arr, 7);
        if ( append_arr(&arr, 8) )
        {
            printf("追加成功
    ");
        }
        else
        {
            printf("追加失败!
    ");
        }
    */    
        show_arr(&arr);
        inversion_arr(&arr);
        printf("倒置之后的数组内容是:
    ");
        show_arr(&arr);
        sort_arr(&arr);
        show_arr(&arr);
    
        //printf("%d
    ", arr.len);
    
        return 0;
    }
    //完成初始化 
    void init_arr(struct Arr * pArr, int length)
    {
        pArr->pBase = (int *)malloc(sizeof(int) * length);
        if (NULL == pArr->pBase)
        {
            printf("动态内存分配失败!
    ");
            exit(-1); //终止整个程序
        }
        else
        {
            pArr->len = length;
            pArr->cnt = 0;
        }
        return;
    }
    
    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) )   
        {
            printf("数组为空!
    ");
        }
        else
        {
            for (int i=0; i<pArr->cnt; ++i)
                printf("%d  ", pArr->pBase[i]); //int *
            printf("
    ");
        }
    }
    
    bool append_arr(struct Arr * pArr, int val)
    {
        //满是返回false
        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))
            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;
    }
    
    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;
                }
            }
        }
    }
  • 相关阅读:
    搭建JMeter+Jenkins+Ant持续化
    pytest+allure +requests接口自动化
    pytest + allure自动化测试
    测试流程
    unittest单元测试
    面向对象(三)----私有属性,方法
    文件的相关操作
    vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴
    富文本插件
    cursor
  • 原文地址:https://www.cnblogs.com/pig1314/p/8652873.html
Copyright © 2011-2022 走看看