类的封装:
#include<iostream>
using namespace std;
template<class T> //模板声明,数据元素虚拟类型为T
class sq_LList //顺序表类
{
private: //数据成员
int mm; //存储空间容量
int nn; //顺序表长度
T * v; //顺序表存储空间首地址
public:
sq_LList(){mm=0;nn=0;return;}
sq_LList(int); //建立空顺序表,申请存储空间
void prt_sq_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_sq_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)return (-1); //存储空间已满,返回-1
if(nn==0)return (0); //顺序表为空,返回0
return 1;
}
//在表的指定元素前插入新元素
template<class T> void sq_LList<T>::ins_sq_LList(int i,T b)
{
int k;
if(nn==mm) //存储空间已满,上溢错误
{cout<<"overflow"<<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个元素均后移一个位置
v[i-1]=b; //插入新元素
nn=nn+1; //顺序表长度加1
return ;
}
//在顺序表中删除指定元素
template<class T> void sq_LList<T>::del_sq_LList(int i)
{
int k;
if(nn==0) //顺序表为空,下溢错误
{cout<<"underflow!"<<endl; return;}
if((i<1)||(i>nn)) //顺序表中没有这个元素
{
cout<<"Not this element in the list!"<<endl;
return;
}
for(k=i;k<nn;k++)
v[k-1]=v[k]; //从第i个元素直到最后一个元素均前移一个位置
nn=nn-1; //顺序表长度减1
return;
}
题目:建立容量为100的空顺序表,然后输出该空顺序表。在该顺序表中集资在第0个元素前插入1.5,在第1个元素前插入2.5以及在第4个元素前插入3.5,再输出该顺序表。再输出删除该顺序表中的第0个元素以及删除该顺序表中的第1个元素,再输出该顺序表。
主函数:
#include "sq_LList.h"
int main()
{
sq_LList<double> s1(100);
cout<<"第1次输出顺序表对象sl:"<<endl;
s1.prt_sq_LList();
s1.ins_sq_LList(0,1.5);
s1.ins_sq_LList(1,2.5);
s1.ins_sq_LList(4,3.5);
cout<<"第2次输出顺序表对象s1:"<<endl;
s1.prt_sq_LList();
s1.del_sq_LList(0);
s1.del_sq_LList(1);
cout<<"第3次输出顺序表对象s1:"<<endl;
s1.prt_sq_LList();
return 0;
}
在第0个元素之前插入1.5,默认为在第一个元素之前插入,所以1.5插在第一个元素的位置上;
接下来,在第一个元素前插入2.5,即在1.5之前插入,这点一开始不理解(注意)
在第4个元素之前插入3.5,因为现在顺序表中只有两个元素,所以默认在最后一个位置插入。运行到这儿时,输出结果为:
第1次输出顺序表对象s1:
nn=0
第2次输出顺序表对象s1:
nn=3
2.5
1.5
3.5
删除元素,删除第0个元素,不存在,出现异常,显示结果;删除第1个元素,这样理解,根据题目中的做法,应该是删除第一个插入的元素1.5,按我的理解,现在顺序表中数据依次为2.5, 1.5, 3.5,所以删除顺序表中的第一个元素,应该是删除2.5