zoukankan      html  css  js  c++  java
  • 数据结构之顺序表的操作

    /*
        时间:2019年10月11日22:09:45
        说明:函数的形参以struct Arr*类型,
        因为指针变量只占4个字节,
        如果传入的形参是struct Arr类型,struct Arr所占字节大于4个,内存更浪费了
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    //定义了一个数据类型,该数据类型的名字叫struct Arr,该数据类型含有三个成员,分别是pBase,len,cnt;
    struct Arr{
        int* pBase;//存储的是数组第一个元素的地址
        int len;  //数组所能容纳的最大元素的个数
        int cnt;//当前数组有效元素的个数
    };
    void init_arr(struct Arr *,int length);  //初始化数组
    bool append_arr(struct Arr*,int val);//追加元素到末尾
    bool insert_arr(struct Arr*,int position,int val);  //在position位置插入val值,position的值从1开始
    bool delete_arr(struct Arr*,int position,int *pVal); //删除第position个元素,position从1开始
    int get();
    bool is_empty(struct Arr *);            //判断数组是否为空数组
    bool is_full(struct Arr *);            //判断数组是否已满
    void sort_arr(struct Arr *);                     //给数组排序
    void show_arr(struct Arr *);         //打印数组
    void inversion_arr(struct Arr *);   //将数组倒置

    int main(void)
    {
        struct Arr arr;
        int val;
        init_arr(&arr,6);
        append_arr(&arr,6);
        append_arr(&arr,5);
        append_arr(&arr,8);
        show_arr(&arr);
        insert_arr(&arr,4,9);
        show_arr(&arr);
        delete_arr(&arr,3,&val) ;
        printf("%d ",val);
        show_arr(&arr);
        inversion_arr(&arr);
        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->len == pArr->cnt)
        {
            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]);
            }
            printf(" ");
        }
    }

    bool append_arr(struct Arr* pArr,int val)
    {
        if(is_full(pArr))   //满时返回false
        {
            return false;
        }
        else     //不满时追加
        {
            int position = pArr->cnt;
            pArr->pBase[position] = val;
            pArr->cnt += 1;
            return true;
        }
    }
    bool insert_arr(struct Arr* pArr,int position,int val)
    {
        if(is_full(pArr) || position < 1 || position > pArr->cnt+1 || position > pArr->len)
        {
            return false;
        }
        else
        {
            for(int i = pArr->cnt;i >= position-1;i--)
            {
                pArr->pBase[i] = pArr->pBase[i-1];
            }
           
            pArr->pBase[position-1] = val;
            pArr->cnt += 1;
            return true;
        }
    }

    bool delete_arr(struct Arr* pArr,int position,int *pVal)
    {
        if(is_empty(pArr))
        {
            return false;
        }
        else if(position < 1 || position > pArr->cnt)
        {
            printf("删除失败!");
            return false;
        }
        else
        {
            *pVal = pArr->pBase[position-1];
           for(int i = position;i < pArr->cnt;i++)
           {
                pArr->pBase[i-1] = pArr->pBase[i];
           }
          pArr->cnt -= 1;
           return true;
        }
    }
    void inversion_arr(struct Arr *pArr)
    {
       int i = 0,j = pArr->cnt - 1;
       int temp;
       while(i < j)
       {
           temp = pArr->pBase[i];
           pArr->pBase[i] = pArr->pBase[j];
           pArr->pBase[j] = temp;
           i++;
           j--;
       }
    }
    //冒泡排序
    void sort_arr(struct Arr * pArr)
    {
        int temp;
        for(int i = 0;i < pArr->cnt - 1;i++)
        {
            for(int j = 0;j < pArr->cnt - i -1;j++)
            {
                if(pArr->pBase[j] > pArr->pBase[j+1])
                {
                   temp = pArr->pBase[j];
                   pArr->pBase[j] = pArr->pBase[j+1];
                   pArr->pBase[j+1] = temp;
                }
            }
        }
    }
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/baoyingying/p/11657312.html
Copyright © 2011-2022 走看看