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

    //数组
    
    # include <stdio.h>
    # include <malloc.h> //包含了 malloc 函数
    # 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); //追加
    bool insert_arr(struct Arr *pArr, int pos, int val); //插入
    bool delete_arr(struct Arr *pArr, int pos, 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 inverson_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(&ar, 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, 6, 99);
        
        
        append_arr(&arr, 6);
        append_arr(&arr, 7);
        if ( append_arr(&arr, 8) )
        {
            printf("追加成功
    ");
        }
        else
        {
            printf("追加失败!
    ");
        }
    */
    
        show_arr(&arr);
        inverson_arr(&arr);
        printf("倒置之后的内容是:
    ");
        show_arr(&arr);
        sort_arr(&arr);
        printf("排序之后的结果是:
    ");
        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 0;
    }
    
    bool is_empty(truct Arr *pArr); //判断是否为空
    {
        if (0 == pArr->cnt)
            return true;
        else
            return false;
    }
    
    bool is_full(struct Arr *pArr); //判断是否满
    {
        if (pArr->cnt == pArr->len)
            return turn;
        else
            return false;
    }
    
    void show_arr(struct Arr *pArr) //输出
    {
        if ( is-empty(pArr) )
        {
            printf("数组为空!
    ");
        }
        else
        {
            for (int i=0; i<pArr->cnt; ++i)
                prinf("%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] = var;
        (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+i] = pArr->pBase[i];
        }
        pArr->pBase[pos-1] = val;
        pArr->cnt++
        
        return true;
    }
    
    bool delete_arr(struct Arr *pArr, int pos, int * pVal); //删除
    {
        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 inverson_arr(struct Arr *pArr); //倒置
    {
        int i = 0;
        int j = pArr->cnt-1;
        
        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;
                }
            }
        }
    }
  • 相关阅读:
    大话数据结构笔记
    zsh安装教程
    Matlab安装教程
    7-16 插入排序还是归并排序 (25 分)
    7-14 插入排序还是堆排序 (25 分)
    7-14 二叉搜索树的最近公共祖先 (30 分)
    7-11 笛卡尔树 (25 分)
    中缀转换为后缀和前缀
    7-15 水果忍者 (30 分)
    兔子的区间密码(思维)
  • 原文地址:https://www.cnblogs.com/LXL616/p/10661602.html
Copyright © 2011-2022 走看看