线性表顺序存储一般就是以数组的形式存储,一切都是对数组的操作,下面给出一个类定义的头文件,和一个实例
顺序表类:文件名 sq_LList.h
#include <iostream>
using namespace std;
template <class T>
class sq_LList
{
private:
int mm; //存储空间容量
int nn; //顺序表长度
T *v; //顺序表存储空间首地址
public:
sq_LList()
{
mm=0;
nn=0;
return;
}
sq_LList(int); //建立空顺序表,申请存储空间
void prt_LList(); //顺序输出顺序表中的元素与顺序表长度
int flag_sq_LList(); //检测顺序表的状态
void ins_sq_LList(int,T);//在表的指定元素前插入新元素
void del_sq_LList(int); //在表中删除指定元素
};
template <class T>
sq_LList <T>::sq_LList(int m)
{
mm=m; //存储空间容量
v=new T[mm];//动态申请存储空间
nn=0; //顺序表长度为0,即建立空顺序表
return;
}
template <class T>
void sq_LList<T>::prt_LList()
{
int i;
cout<<"nn="<<nn<<endl;
for(i=0;i<nn;i++)
cout<<v[i]<<endl;
return ;
}
template <class T>
int sq_LList<T>::flag_sq_LList()
{
if(nn==mm)
{
cout<<"空间已满"<<endl;
return(-1);
}
if(nn==0)
{
cout<<"顺序表为空"<<endl;
return(0);
}
return(1);
}
template <class T>
void sq_LList<T>::ins_sq_LList(int i,T b)
{
int k;
if(nn==mm)
{
cout<<"已满"<<endl;return;
}
if(i>nn)
i=nn+1;
if(i<1)
i=1;
for(k=nn;k>=i;k--)
{
v[k]=v[k-1];//从最后一个元素直到第i个元素都后移一个位置,注意数组是从0开始
}
v[i-1]=b;
nn=nn+1;
return ;
}
template<class T>
void sq_LList<T>::del_sq_LList(int i)
{
int k;
if(nn==0)
{
cout<<"表为空"<<endl;
return;
}
if(i<1||i>nn)
{
cout<<"表中没有这个位置的元素"<<endl;
return;
}
for(k=i;k<nn;k++)
{
v[k-1]=v[k];
}
nn=nn-1;
return ;
}
具体应用实例:文件名 test.cpp
#include "sq_LList.h"
#include <stdlib.h>
int main()
{
sq_LList<double> s1(100);
cout<<"第一次输出顺序表对象s1:"<<endl;
s1.prt_LList();
s1.ins_sq_LList(0,1.5);
s1.ins_sq_LList(1,2.5);
s1.ins_sq_LList(4,3.5);
cout<<"第二次输出顺序表对象s1:"<<endl;
s1.prt_LList();
s1.del_sq_LList(0);
s1.del_sq_LList(2);
cout<<"第三次输出顺序表对象s1:"<<endl;
s1.prt_LList();
system("pause");
return 0;
}
输出结果:
第一次输出顺序表对象s1:
nn=0
第二次输出顺序表对象s1:
nn=3
2.5
1.5
3.5
表中没有这个位置的元素
第三次输出顺序表对象s1:
nn=2
2.5
3.5
请按任意键继续. . .