zoukankan      html  css  js  c++  java
  • 线性表的顺序存储结构

    顺序存储的定义
    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表中的数据元素。

    在C++中的表现是什么样子的呢?
    可以考虑用一个数组,一个固定大小的数组来作为存储介质存储线性表中的元素。

    如何用C++里面的原生数组实现一个线性表。原生数组符合顺序存储的定义

    设计思路
    ——可以用一维数组来实现顺序存储结构
      存储空间:T* m_array;
      当前长度:int m_length;

    template <typename T>
    class SeqList : public List<T>
    {
    protected:
        T* m_array;
        int m_length;
        ...
    };
      

    顺序存储结构的元素获取操作
    ——判断目标位置是否合法
    ——将目标位置作为数组下标获取元素

    bool SeqList<T>:: get(int i, T& e) const
    {
        bool ret = ((0 <= i) && (i < m_length));
        
        if(ret)
        {
            e = m_array[i];
        }
        
        return ret;
    }

    顺序存储结构的元素插入操作
    1.判断目标位置是否合法
    2.将目标位置之后的所有元素后移一个位置(包含当前元素)
    3.将新元素插入目标位置
    4.线性表长度加1

    顺序存储结构的元素插入示例:

    bool SeqList<T>:: insert(int i, const T& e)
    {
        bool ret = ((0 <= i) && (i <= m_length)); //解释i<=m_length。5个手指头,可以在6个地方进行插入。
        ret = ret && ((m_length + 1) <= capacity()); //capacity()表示顺序存储结构的最大容量。为什么要做这个判断,因为
                                                     //现在使用的是C++中的原生数组来实现线性表,而原生数组就有一个预先定义好的最大存储量。
                                                     //每次插入之前,要判断一下当前的存储空间是不是用完了。
        
        if(ret)
        {
            for(int p=m_length-1; p>=i; p--) //从后面开始挪位置(最后的那个元素)。
            {
                m_array[p + 1] = m_array[p];
            }
            
            m_array[i] = e;
            m_length++;
        }
        
        return ret;
    }

    顺序存储结构的元素删除操作
    1.判断目标位置是否合法
    2.将目标位置后的所有元素前移一个位置
    3.线性表长度减1

    bool SeqList<T>:: remove(int i)
    {
        bool ret = ((0 <= i) && (i < m_length));
                                                        
        if(ret)
        {
            for(int p=i; p<m_length-1; p++)
            {
                m_array[p] = m_array[p+1];
            }
    
            m_length--;
        }
        
        return ret;
    }

    实战预告

  • 相关阅读:
    Android系统根文件系统目录结构
    4面 晶晨半导体 问题总结
    linux 工作队列
    Linux tasklet 的测试
    ArbotiX-M引脚说明
    locobot
    视频地址
    S1雷达ROS包更新指南
    rospy
    mx-28在 labview环境下的开发
  • 原文地址:https://www.cnblogs.com/-glb/p/12045769.html
Copyright © 2011-2022 走看看