特点:
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素。
作用:
线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
顺序存储的实现:
一维数组存储顺序表中的数据
缺点:
大小固定,使用前需要分配地址,因此当表长变化较大时,难以确定合适的存储规模。插入删除操作复杂性太高。
优点:
元素访问的时候O(1)访问。
实现代码:
//顺序表借助数组实现,然后必须要规定大小才能分配地址。宏定义
using namespace std;
template <class T>
class SeqList
{
private:
T data[MaxSize]; // 存放数据元素的数组
int length; // 线性表的长度
public:
SeqList( )
{
length=0; // 无参构造函数
}
SeqList ( T *a, int n ); // 有参构造函数
int get_Len ( ) {return length; } // 求线性表的长度
void print_List ( ) ; // 打印线性表
void ins_Loc(int i, T x);// 在线性表中第 i 个位置插入值为 x 的元素
void del_Loc(int i);//删除线性表的第 i 个元素
T get_Loc(int i); // 按位查找,取线性表的第 i 个元素
T ser_Loc(T x); // 按值查找,求线性表中值为 x 的元素序号
~SeqList( ) { } // 析构函数为空,数组是程序结束自动回收内存,无需写析构函数
};
template <class T>
SeqList<T>:: SeqList(T a[], int n) //带参数构造函数
{
if (n>MaxSize)
throw "超出限制"; //抛出异常情况
length=n;
for(int i=0; i<n; i++)
data[i]=a[i];
}
template <class T>
void SeqList<T>::ins_Loc(int i, T x)
{
if (length>=MaxSize)
throw "超出限制";
if (i<1 || i>length+1)
throw "位置非法";
length++;
for (int j=length; j>=i; j--)
data[j]=data[j-1];
data[i-1]=x;
}
template <class T>
void SeqList<T>::del_Loc(int i)
{
if (length==0)
throw "空表";
if (i<1 || i>length)
throw "位置非法";
for (int j=i; j<length; j++)
data[j-1]=data[j];
length--;
return ;
}
template <class T>
T SeqList<T>::get_Loc(int i)
{
if (i<1 && i>length)
throw "查找位置非法";
else
return data[i-1];
}
template <class T>
T SeqList<T>::ser_Loc(T x)
{
for (int i=0; i<length; i++)
if (data[i]==x)
return i+1 ; //下标为i的元素等于x,返回其序号i+1
return 0; //退出循环,说明查找失败
}
template <class T>
void SeqList<T>:: print_List()
{
for(int i=0;i<length;i++) cout<<data[i]<<" ";
}
int main()
{
//使用以上功能的代码就不给出了
}