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

    模块一

    • 线性结构:把所有的节点用一根直线穿起来

      连续存储[数组]
      离散存储[链表]

    • 线性结构的两种常见应用:栈/队列

    1. 数组:元素类型相同,大小相同
    2. 数组的优缺点

    连续存储[数组]

    //Arr.cpp
    #include <stdio.h>
    #include <stdbool.h>
    #include <malloc.h>  //包含了,alloc()
    #include <stdlib.h> //包含了exit()
    
    //定义了一个数据类型,该数据类型的名字叫struct Arr,该数据类型含有三个成员
    struct Arr
    {
        int * pBase;  //存储的是数组第一个元素的地址
        int len;      //数组所能容纳的最大元素的个数
        int cnt;      //当前数组有效元素的个数
        int incerment; //自动增长因子(本程序不涉及)
    };
    
    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的值从一开始
    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 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,0,99);
        append_arr(&arr,6);
        append_arr(&arr,7);
        append_arr(&arr,8);
        if(append_arr(&arr,8) )
        {
            printf("追加成功
    ");
        }
        else
        {
            printf("追加失败
    ");
        }
     */   
        show_arr(&arr);
        inversion_arr(&arr);
        printf("倒置之后的数组内容");
        show_arr(&arr);
        sort_arr(&arr);
        show_arr(&arr);
    
    
        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*[i])
            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 false;
    }
    
    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;
            }
        }
    }
    

    本文来自博客园,作者:小恒2020,转载请注明原文链接:https://www.cnblogs.com/xiaoheng2020/p/12663506.html

  • 相关阅读:
    Java多线程之赛跑游戏(含生成exe文件)
    JavaSE之绘制菱形
    JavaSE项目之员工收录系统
    深度解析continue,break和return
    如何查看yum安装路径
    转载 linux umount 时出现device is busy 的处理方法--fuser
    linux安装扩展总结
    linux 编译安装amqp
    vmware 实现linux目录映射window本地目录
    yaf学习之——生成yaf示例框架
  • 原文地址:https://www.cnblogs.com/xiaoheng2020/p/12663506.html
Copyright © 2011-2022 走看看