数据结构——顺序表

数据结构顺序表是固定的大小,如果不知道数据的多少可能会造成空间的浪费,但在知道数据多少的情况下对于空间的浪费就非常小了,顺序表不会经常开辟空间,减少了碎片空间的出现,存储数据较快,因为顺序表是一个数组可以通过下标访问,在数据的读取上时间复杂度是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.
综上所述,如果在知道数据的大小并且不需要进行频繁的插入删除等,只进行数据的读取用顺序表是一个非常高效的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值