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;
}
运行结果如下:
如果大家有疑问,可以在评论处提出,我会尽全力解答的!顺序表不会大家可以看一下数组,类与对象,类模板的相关知识点