一、实验思路
首先建立一个头文件,头文件里建立一个类,包括对象初始化、增、删、查、显示等操作函数声明和一个数组、一个整型表示数组长度。然后建立一个SeqList.cpp文件,里面包含各种函数的定义。最后建立一个主函数对各个函数进行测试。
二、源代码
#ifndef SeqList_H
#define SeqList_H
const int MaxSize=100;
template<class T>
class SeqList
{
public:
SeqList(){length=0;}//线性表的初始化,建立一个空的顺序表
SeqList(T m[],int i);//带参的构造函数,初始化一个长度值为i的数据类型为Typename的顺序表
~SeqList(){}//析构函数
int Length(){return length;}//返回顺序表的长度
void Insert(int i,T x);//嵌入操作,在第i个位置嵌入x值
T Delete(int i);//删除操作,删除第i个元素,返回该元素的值
int Locate(T x);//按值查找操作,返回该值的位置
T Get(int i);//按位查找操作,返回该位置的元素值
void PrintList();//输出操作,按序号输出
private:
int length;
T data[MaxSize];
};
#endif
#include<iostream>
#include<iomanip>
using namespace std;
#include"SeqList.h"
template<class T>
SeqList<T>::SeqList(T m[],int i)
{
if(i>MaxSize)throw"参数非法";
for(int j=0;j<i;j++)
{
data[j]=m[j];
}
length=i;
}
template<class T>
void SeqList<T>::Insert(int i,T x)
{
if(i>=MaxSize)throw"向上溢出";
if(i<1||i>MaxSize)throw"位置非法";
for(int j=length;j>=i;j--)
{
data[j]=data[j-1];
}
data[i-1]=x;
length++;
}
template<class T>
T SeqList<T>::Delete(int i)
{ T x;
if(i<1)throw"向下溢出";
if(i<1||i>=MaxSize)throw"向下溢出";
x =data[i-1];
for(int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
template<class T>
int SeqList<T>::Locate(T x)
{
for(int j=0;j<length;j++)
{
if(data[j]==x) return j=1;
}
return 0;
}
template<class T>
T SeqList<T>::Get(int i)
{
T x=data[i-1];
return x;
}
template<class T>
void SeqList<T>::PrintList()
{
/*for(int j=0;j<length;j++)
{
Cout.Put(data[j]);
}
cout<<endl;*/
for(int j=0;j<length;j++)
{
cout<<setw(5)<<data[j]<<" ";
cout<<endl;
}
/* for(int j=0;j<length;j++)
{
printf("%c",&data[j]);
cout<<'/n';
}
*/
}
#include<iostream>
#include"SeqList.h"
#include"SeqList.cpp"
using namespace std;
void main()
{
//int r[3]={1,2,3};
char p[3]={'a','b','c'};
SeqList<char> M(p,3);
//SeqList<int> M(r,3);
cout<<"输出顺序表:"<<endl;
M.PrintList();
cout<<"输出顺序表的长度:"<<endl;
cout<<M.Length()<<endl;
cout<<"输出嵌入操作前的顺序表:"<<endl;
M.PrintList();
try
{
M.Insert(2,'f');
// M.Insert(2,'0');
}
catch(string *s)
{
cout<<s<<endl;
}
cout<<"输出嵌入操作后的顺序表:"<<endl;
M.PrintList();
try
{
M.Delete(3);
}
catch(string *s)
{
cout<<s<<endl;
}
cout<<"输出删除操作后的顺序表:"<<endl;
M.PrintList();
//cout<<"元素3的位置是:"<<endl;
cout<<"元素a的位置是:"<<endl;
cout<<M.Locate('a');
// cout<<M.Locate(3)<<endl;
cout<<"第三个元素是:"<<endl;
cout<<M.Get(3)<<endl;
}
三、测试结果
(1)当数组元素为整型时,执行结果如下(设置了格式)
(2)当数组元素为字符型,执行结果如下
四、实验心得
刚插入字符数组是,输出的结果是字符串,反复调试结果一样。后来修改了函数的语句,也无法实现单个字符输出。经过几天后,再次调试,执行结果和预想结果一致。