欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-01 11:27:54
...

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;
}

运行结果如下:
c++实现顺序表的基本操作(类模板)
如果大家有疑问,可以在评论处提出,我会尽全力解答的!顺序表不会大家可以看一下数组,类与对象,类模板的相关知识点