顺序表

Posted suomeimei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表相关的知识,希望对你有一定的参考价值。

顺序表的一般特性

  • 顺序表的内存空间是一连串的地址空间
  • 与数组需要一个唯一的数组名一样,顺序表也需要有一个唯一的表名来表示
  • 数据在顺序表中按先后顺序排序,存取时可根据相对位置进行随机存取

顺序表数据结构

const int defaultSize = 10;
template <typename DataType> class SeqList
{
public:
    //构造函数
    SeqList(int size = defaultSize)
    {
        if (size>0)    //检查赋予的顺序表大小,如果合法则分配相应大小的内存
        {
            maxSize = size;
            elements = new DataType[maxSize];    //分配内存大小
        }
    }
    //析构函数
    ~SeqList()
    {
        delete[] elements;    //内存回收
    }
    int getLength()
    {
        return length;
    }
    bool insertElement(DataType data);    //向表尾插入新元素
    bool deleteElement(int location);    //删除指定位置的元素
    DataType getElement(int location);    //返回指定位置的元素
    bool changeElement(int location,DataType newData);    //修改指定位置的元素值
private:
    DataType *elements;
    int maxSize;    //顺序表最大大小
    int length;        //顺序表的有效长度
};

顺序表插入操作

template<typename DataType>
bool SeqList<DataType>::insertElement(DataType data)
{
    int currentIndex = length;            //记录新元素的插入位置
    if (length>=maxSize)                //判断顺序表是否已满
    {
        return false;                    //顺序表已满,返回false,插入不成功
    }
    else
    {
        elements[currentIndex] = data;    //将新元素插入到顺序表表位
        length++;
        return true;                    
    }
}

删除指定位置的元素

template<typename DataType>
bool SeqList<DataType>::deleteElement(int location)
{
    if (location>=length||location<0)
    {
        return false;
    }
    else
    {
        for (int i=location;i<length;i++)
        {
            elements[i] = elements[i + 1];    //将指定位置之后的元素依次往前移动覆盖前一个元素
        }
        length--;                            //顺序表长度减一
        return true;
    }
}

获取指定位置的元素

template<typename DataType>
DataType SeqList<DataType>::getElement(int location)
{
    if (location<0||location>length)        //判断位置索引是否合法
    {
        std::cout << "参数无效" << endl;
    }
    else
    {
        return elements[location];            //返回指定位置的元素
    }
}

修改指定位置的元素

template<typename DataType>
bool SeqList<DataType>::changeElement(int location, DataType newData)
{
    if (location<0||location>=length)        //验证位置索引参数是否有效
    {
        return false;
    }
    else
    {
        elements[location] = newData;        //将新元素赋给指定位置
        return true;
    }
}

测试

int main()
{
    SeqList<int> list(10);                            //建立顺序表
    for (int i = 0; i < 10; i++)
        list.insertElement(i);                        //插入数据实现初始化
    for (int i = 0; i < list.getLength(); i++)
        cout << list.getElement(i) << " ";            //输出初始化后的顺序表
    cout << endl;
    list.deleteElement(3);                            //删除索引为3的元素
    for (int i = 0; i < list.getLength(); i++)
        cout << list.getElement(i) << " " ;            //输出删除后的顺序表
    cout << endl;
    list.changeElement(5, 44);                        //将顺序表索引为5的元素修改为44
    for (int i = 0; i < list.getLength(); i++)
        cout << list.getElement(i) << " ";            //输出修改后的顺序表
    cout << endl;
    return 0;
}

 结果

 技术图片

 

以上是关于顺序表的主要内容,如果未能解决你的问题,请参考以下文章

将数据从底部工作表对话框片段传递到片段

Android 在 FragmentPagerAdapter 中更改片段顺序

从底部工作表对话框片段中获取价值

关于代码片段的时间复杂度

Mysql Innodb 表碎片整理

片段(Java) | 机试题+算法思路+考点+代码解析 2023