顺序表的一些特性总结如下:
顺序表 | |
---|---|
存储空间 | 预先分配,可能会导致空间闲置或溢出 |
存储密度 | 存储密度为1,逻辑关系等于存储关系,没有额外开销 |
存取元素 | 随机存取,按位置访问元素的时间复杂度O(1) |
插入、删除 | 插入和删除都要移动大量的元素。平均移动元素约为表的一半。时间复杂度O(n) |
适用情况 | 1.表长变化不大,或者事先就能确定变化的范围 2.很少进行插入和删除,需要下标访问元素 |
用C++实现一个顺序表的部分功能代码如下:
//1 顺序表
#include <iostream>
using namespace std;
#define SplMaxSize 10
typedef int SplELemType;
class Splist
{
public:
SplELemType *mbase;
int mlength;
int SearchElem(SplELemType e);//查找元素
int GetElem(int position, SplELemType &e);//从指定位置获取元素
int SqlInsert(int position, SplELemType &e);//从指定位置插入元素
int SqlDelet(int position);//删除指定位置元素
void SqlClear(void);//清空数据
bool SqlIsEmpty(void);//是否为空
Splist(int length);//初始化
void PrintSpl(void);//打印顺序表的数据
~Splist();
private:
};
//初始化
Splist::Splist(int length)
{
if (length >= SplMaxSize)
{
return;
}
this->mbase = new SplELemType[SplMaxSize];
this->mlength = length;
cout << "输入顺序表的元素:" << endl;
for (int i = 0; i < mlength; i++)
{
cin >> mbase[i];
}
}
//打印顺序表的数据
void Splist::PrintSpl(void)
{
for (int i = 0; i < mlength; i++)
{
cout << "顺序表下标:" << i << " 数据:" << mbase[i] << endl;
}
}
//查找元素
int Splist::SearchElem(SplELemType e)
{
for (int i = 0; i < mlength; i++)
{
if (mbase[i] == e)
{
return i;
}
}
return -1;//查找失败
}
//从指定位置获取元素
int Splist::GetElem(int position, SplELemType &e)
{
if (position < 0 || position >= mlength)
{
return -1;//获取失败
}
e = mbase[position];
return 1;
}
//从指定位置插入元素
int Splist::SqlInsert(int position, SplELemType &e)
{
if (position < 0 || position >= mlength)
{
return -1;//插入失败
}
for (int i = mlength; i >= position; i--)//数据往右移动,所以下标初始位置应为末尾
{
mbase[i+1] = mbase[i];
}
mbase[position] = e;
mlength++;
}
//删除指定位置元素
int Splist::SqlDelet(int position)
{
if (position < 0 || position >= mlength)
{
return -1;//删除失败
}
for (int i = position; i < mlength - 1; i++)//数据往左移动,所以下标初始位置应为删除位置进行覆盖
{
mbase[i] = mbase[i+1];
}
mlength--;
}
//清空数据
void Splist::SqlClear(void)
{
mlength = 0;
}
//是否为空
bool Splist::SqlIsEmpty(void)
{
if (mlength == 0)
{
return true;
}
}
//析构函数
Splist::~Splist()
{
if (mbase != nullptr)
{
delete[] mbase;
}
}
int main()
{
Splist Spl(5);//初始化
//测试功能
Spl.SqlDelet(0);
Spl.PrintSpl();
system("pause");
return 0;
}