c++实现顺序表的基本操作(类模板)

c++实现顺序表基本操作(类模板)

第二期

上次写的是单链表的基本操作,下面写一个比单链表简单的——顺序表,顺序表跟数组的关系非常密切
运用数组所学的知识可实现顺序表的功能
功能实现如下:
①:元素的插入
②:元素的删除
③:根据元素的位置输出元素值
④:根据元素值定位查找元素位置
⑤:实现顺序表元素的翻转
话不多说,上代码!

#include<iostream>
using namespace std;
const int Maxsize=100;
template<class T>
class SeqListClass
{
private:
    T *data;//存放顺序表中的元素
    int length;//存放顺序表的长度
public:
    SeqListClass();//构造函数
    ~SeqListClass();//析构函数
    void CreateList(T a[],int n);//由数组a中的元素建造顺序表
    void DispList();//输出顺序表中的元素
    int ListLength();//求顺序表的长度
    bool GetElem(int i,T &e);//求顺序表第i号的元素值
    int LocateElem(T e);//求顺序表中第一个元素e的序号
    bool ListInsert(int i,T e);//在i号插入元素值e
    bool ListDelete(int i);//删除顺序表中第i号元素
    void ReverseList(SeqListClass<T> &L);//翻转顺序表
};
template<class T>
SeqListClass<T>::SeqListClass()//初始化顺序表
{
    data=new T[Maxsize];
    length=0;
}
template<class T>
SeqListClass<T>::~SeqListClass()
{
    delete []data;
    cout<<"顺序表成功销毁ヾ( ̄▽ ̄)Bye~Bye~"<<endl;
}
template<class T>
void SeqListClass<T>::CreateList(T a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        data[i]=a[i];
    length=i;
}
template<class T>
void SeqListClass<T>::DispList()
{
    cout<<"Out:"<<endl;
    for(int i=0;i<length;i++)
        cout<<data[i]<<" ";
    cout<<endl;
}
template<class T>
int SeqListClass<T>::ListLength()
{
    return length;
}
template<class T>
bool SeqListClass<T>::GetElem(int i,T &e)
{
    if(i<0||i>length)
        return false;
        e=data[i-1];//i号元素的下标为i-1
    return true;
}
template<class T>
int SeqListClass<T>::LocateElem(T e)
{
    int i;
    for(i=0;i<length;i++)
    {
        if(data[i]==e)
            return i+1;
    }
    return 0;//找完顺序表但未找到该元素值
}
template<class T>
bool SeqListClass<T>::ListInsert(int i,T e)
{
    if(i<0||i>length)
        return false;
    for(int j=length;j>=i;j--)
        data[j]=data[j-1];
    data[i-1]=e;
    length++;
    return true;
}
template<class T>
bool SeqListClass<T>::ListDelete(int i)
{
    if(i<0||i>length)
        return false;
    for(int j=i-1;j<length-1;j++)
        data[j]=data[j+1];//跟数组元素的删除是一样的
        length--;//删除一个元素,长度减一
        return true;
}
template<class T>
void SeqListClass<T>::ReverseList(SeqListClass<T> &L)
{
    T temp;
    for(int j=0;j<L.length/2;j++)
    {
        //三值交换法
        temp=L.data[j];
        L.data[j]=L.data[length-j-1];
        L.data[length-j-1]=temp;
    }
}
int main()
{
    cout<<"------------------------------------顺序表-----------------------------"<<endl;
    SeqListClass<int>sqList;
    int num;
    cout<<"请输入要创建的顺序表的长度~(~ ̄▽ ̄)~"<<endl;
    cin>>num;
    if(num<=0)
    {
        cout<<"创建失败!"<<endl;
    return 0;
    }
    cout<<"创建长度为:"<<num<<"的顺序表成功(* ̄▽ ̄*)ブ"<<endl;
    int arr[num]={0};
    for(int i=0;i<num;i++)
    {
        cout<<"请输入第"<<i+1<<"元素的值:";
        cin>>arr[i];
    }
    sqList.CreateList(arr,num);
    sqList.DispList();
    cout<<"sqList length is:"<<sqList.ListLength()<<endl;
    int a;
    sqList.GetElem(2,a);
    cout<<"The 2 local is elem:"<<a<<endl;
    cout<<"The elem 5 local is:"<<sqList.LocateElem(5)<<endl;
    sqList.ListInsert(2,23);
    sqList.DispList();
    sqList.ListDelete(1);
    sqList.DispList();
    sqList.ReverseList(sqList);
    sqList.DispList();
    return 0;
}

运行结果如下:
在这里插入图片描述
如果大家有疑问,可以在评论处提出,我会尽全力解答的!顺序表不会大家可以看一下数组,类与对象,类模板的相关知识点

发布了11 篇原创文章 · 获赞 3 · 访问量 1299

猜你喜欢

转载自blog.csdn.net/pipihan21/article/details/104399591