实验一(模板类操作)

来源:互联网 发布:工地记工软件 编辑:程序博客网 时间:2024/06/05 17:17

一、实验思路

首先建立一个头文件,头文件里建立一个类,包括对象初始化、增、删、查、显示等操作函数声明和一个数组、一个整型表示数组长度。然后建立一个SeqList.cpp文件,里面包含各种函数的定义。最后建立一个主函数对各个函数进行测试。

二、源代码

#ifndef SeqList_H#define SeqList_Hconst 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)当数组元素为字符型,执行结果如下


四、实验心得

  刚插入字符数组是,输出的结果是字符串,反复调试结果一样。后来修改了函数的语句,也无法实现单个字符输出。经过几天后,再次调试,执行结果和预想结果一致。