线性表包括顺序表和链表,相对来说顺序表还是挺简单的,没有指针,就不会出现各种乱七八糟的错误。下面主要对顺序表的几个主要实现功能进行简单的分析以及讲解:
主类:
const int Maxsize=100;
template <class T>
class Lists
{
T data[Maxsize];//存放数据
int length;//存放数据的数量
public:
Lists();
Lists(T a[],int n);//两个构造函数
~Lists();//析构函数
int lengths();//返回长度
T getdata(int i);//按位置进行查找
int location(T x);//查询数据的坐标
void insertnew(T x,int i);//在i位置插入新的数据
void deleteold(int i);//删除数据
int emptys();//检查是否为空
void bianli();//遍历函数
};
注意:(这个代码是采用模板的方式)
构造函数:
这里有一个无参,一个有参的构造函数(仅供参考):
template<class T>
Lists<T>::Lists()
{
length=0;
}
template<class T>
Lists<T>::Lists(T a[],int n)
{
if(n>Maxsize)
{
cout<<"数据太多";
}
else
{
for(int i=0;i<n;i++)
{
data[i]=a[i];
}
}
length=n;
}
析构函数:
因为是顺序存储,没有主动申请储存空间,系统会主动回收空间,所以析构函数可以为空。以下是各种功能实现:
删除函数
template<class T>
void Lists<T>::deleteold(int i)
{
if(length==0||i<1||i>length)
{
cout<<"error";
}
else
{
for(int j=i;j<length;j++)
{
data[j-1]=data[j];
}
length--;
}
}
插入函数
template<class T>
void Lists<T>::insertnew(T x,int i)
{
if(length==Maxsize||i<1||i>length+1)
{
cout<<"error";
}
else
{
for(int j=length;j>=i;j--)
{
data[j]=data[j-1];
}
data[i-1]=x;
length++;
}
}
查询坐标
template<class T>
int Lists<T>::location(T x)
{
for(int i=0;i<length;i++)
{
if(data[i]==x)
{
return i+1;
}
}
return -1;
}
按坐标查询数据
template<class T>
T Lists<T>::getdata(int i)
{
if(i>length||i<1)
{
cout<<"error";
}
else
{
return data[i-1];
}
}
返回长度
template<class T>
int Lists<T>::lengths()
{
return length;
}
判断空否
template<class T>
int Lists<T>::emptys()
{
if(length>0)
{
return 1;
}
else
{
return 0;
}
}
数据遍历
template<class T>
void Lists<T>::bianli()
{
for(int i=0;i<length;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
好了基本功能的完整代码就是这些,希望能对有需要的朋友有所帮助,有错误的话,希望帮忙指正。