线性表-顺序存储结构
Posted jkl233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表-顺序存储结构相关的知识,希望对你有一定的参考价值。
线性表-顺序存储结构
顺序存储结构
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
三个属性
- 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置
- 线性表的最大存储容量:数组的长度MaxSize
线性表的当前长度:length
数据长度和线性表长度的区别
- 数据长度就是数组的长度,存放线性表的存储空间的长度,存储分配后这个量一般是不变的
- 线性表长度是线性表中数据元素的个数,随着线性表的删除插入操作,这个长度是改变的
在任何时刻,数组的长度大于等于线性表长度
获得元素,插入,删除操作
//C++代码
例:获得元素值
const int numsLength = 6;//数组大小
int nums[numsLength] = { 1, 2, 3, 4, 5 };
//获取下标为2的元素,并打印
int getNum = nums[2];
cout << getNum << endl;
例:插入数据
//插入
int InsertIndex = -1; //要插入元素的下标
int InsertNum; //插入的数值
cout << "请输入要插入的数值和下标:";
cin >> InsertNum >> InsertIndex;
if (InsertIndex == -1 || InsertIndex < 0 || InsertIndex > 5)
{
cout << "下标输入有误!" << endl;
}
else
{
for (int i = numsLength - 1; i > InsertIndex; i--)
{
nums[i] = nums[i - 1];//移动元素
}
nums[InsertIndex] = InsertNum;//插入数值
//遍历数组
for (int i = 0; i < numsLength; i++)
{
cout << nums[i] << endl;
}
}
例:删除数据
//删除
int DeleteNum;
int DeleteIndex = -1;//删除的数值下标
cout << "请输入要删除的元素:";
cin >> DeleteNum;
//查找要删除的元素的下标位置
for (int i = 0; i < numsLength; i++)
{
//找到和DeleteNum相同的元素
if (nums[i] == DeleteNum)
{
DeleteIndex = i;
break;
}
}
if (DeleteIndex == -1)
{
cout << "要删除的数值没有找到!" << endl;
}
else//找到要删除的元素
{
for (int i = DeleteIndex; i < numsLength-2; i++)
{
nums[i] = nums[i + 1];//移动元素
}
//遍历数组
for (int i = 0; i < numsLength - 2; i++)
{
cout << nums[i] << endl;
}
}
复杂度
在存、读数据时,时间复杂度是:O(1);
插入、删除时,时间复杂度是:O(n);
优缺点
优点
- 无须为表示表中元素之间的逻辑关系而增加额外的存储空间
- 可以快速地存取表中任意位置的元素
缺点
- 插入和删除操作需要移动大量元素
- 当线性表长度变化较大时,难以确定存储空间的容量
以上是关于线性表-顺序存储结构的主要内容,如果未能解决你的问题,请参考以下文章