数据结构顺序表是固定的大小,如果不知道数据的多少可能会造成空间的浪费,但在知道数据多少的情况下对于空间的浪费就非常小了,顺序表不会经常开辟空间,减少了碎片空间的出现,存储数据较快,因为顺序表是一个数组可以通过下标访问,在数据的读取上时间复杂度是O(1),但是如果是删除插入等操作时间复杂度就很高是O(n)`
#include <iostream>
using namespace std;
const int maxsize=100;
template <class T>
class seqlist
{
public:
seqlist(); //生成一个空的顺序表
seqlist(T a[],int &n); //根据已有的数组生成一个顺序表
int Length(); //返回顺序表的长度
T GET(int &i); //返回位置为i的数据
int location(T &x); //查找数据位置返回数据所在位置
void Insert(int &i,T &x); //在位置i插入一个数据
void Delete(int &i); //删除位置i的数据
int Empty(); //判断顺序表是否为空不为空返回长度为空返回0
void Printlist(); //打印顺序表
private:
T date[maxsize];
int length;
};
template <class T>
seqlist<T>::seqlist()
{
length=0;
}
template <class T>
seqlist<T>::seqlist(T a[],int &n)
{
if(n>maxsize)
{
cout<<"数据溢出"<<endl;
}
else
{
length=n;
for(int i=0;i<n;i++)
{
date[i]=a[i];
}
}
}
template <class T>
int seqlist<T>::Length()
{
return length;
}
template <class T>
T seqlist<T>::GET(int &i)
{
if(i>length||i<0)
{
cout<<"位置非法"<<endl;
}
else
{
return date[i-1];
}
}
template <class T>
int seqlist<T>::location(T &x)
{
for(int i=0;i<length;i++)
{
if(date[i]==x)
return i+1;
}
return 0;
}
template <class T>
void seqlist<T>::Insert(int &i,T &x)
{
if(i<0||i>length||length>maxsize)
{
cout<<"位置非法或数据溢出"<<endl;
}
else
{
for(int j=length;j>=i;j--)
{
date[j]=date[j-1];
}
date[i-1]=x;
cout<<date[i-1]<<endl;
length++;
}
}
template <class T>
void seqlist<T>::Delete(int &i)
{
if(i<0||i>length||length==0)
{
cout<<"数据下溢"<<endl;
}
else
{
T date1=date[i-1];
for(int j=i;j<length;j++)
{
date[j-1]=date[j];
}
length--;
}
}
template <class T>
int seqlist<T>::Empty()
{
if(length==0)
{
cout<<"表空"<<endl;
return length;
}
else
return length;
}
template <class T>
void seqlist<T>::Printlist()
{
for(int i=0;i<length;i++)
{
cout<<date[i]<<" ";
}
cout<<endl;
}
int main()
{
int text[]={1,2,3,4,5,6,7,8,9},n=9,n1=2;
seqlist<int> text1(text,n);
cout<<"打印生成的顺序表"<<endl;
text1.Printlist();
cout<<"删除第2个位置的数据"<<endl;
n=2;
text1.Delete(n);
text1.Printlist();
cout<<"输出删除后的顺序表长度"<<endl;
cout<<text1.Length()<<endl;
cout<<"在第3个位置插入2"<<endl;
n=3;
text1.Insert(n,n1);
cout<<"插入后的顺序表"<<endl;
text1.Printlist();
cout<<"返回位置为2的数据"<<endl;
cout<<text1.GET(n1)<<endl;
cout<<"返回数据为2的位置"<<endl;
cout<<text1.location(n1)<<endl;
return 0;
}
上述测试结果如下
打印生成的顺序表
1 2 3 4 5 6 7 8 9
删除第2个位置的数据
1 3 4 5 6 7 8 9
输出删除后的顺序表长度
8
在第3个位置插入2
2
插入后的顺序表
1 3 2 4 5 6 7 8 9
返回位置为2的数据
3
返回数据为2的位置
3
Process returned 0 (0x0) execution time : 0.045 s
Press any key to continue.
综上所述,如果在知道数据的大小并且不需要进行频繁的插入删除等,只进行数据的读取用顺序表是一个非常高效的方法。