实验一(模板类操作)

一、实验思路

首先建立一个头文件,头文件里建立一个类,包括对象初始化、增、删、查、显示等操作函数声明和一个数组、一个整型表示数组长度。然后建立一个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)当数组元素为字符型,执行结果如下


四、实验心得

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值