#include<iostream>
using namespace std;
//线性表大小
const int maxSize = 100;
//定义模板类
template<class DataType>
class MyList {
public:
//无参构造函数 建立一个空顺序表
MyList() {
length = 0;
}
//含参构造函数
MyList(DataType a[], int n);
//析构函数
~MyList() {};
//求线性表的长度
int Length() {
return length;
}
//获取i位置的数据
DataType Get(int i);
//求x的位置
int Locate(DataType x);
//插入x到位置i
void Insert(int i, DataType x);
//删除i处的数据
DataType Delete(int i);
//打印整个线性表
void PrintList();
private:
DataType data[maxSize];
int length;
};
template<class DataType>
MyList<DataType>::MyList(DataType a[], int n) {
if (n > maxSize)
throw "Error: list.length > maxSize";
for (int i = 0; i < n; i++) {
data[i] = a[i];
}
length = n;
}
template<class DataType>
DataType MyList<DataType>::Get(int i) {
if (i < 1 || i > length)
throw "Error: 位置非法";
else
return data[i - 1];
}
template<class DataType>
int MyList<DataType>::Locate(DataType x) {
for (int i = 0; i < length; i++) {
if (data[i] == x)
return i + 1;
}
return 0;
}
template<class DataType>
void MyList<DataType>::Insert(int i, DataType x) {
if (length >= maxSize)
throw "Error: 上溢";
if (i < 1 || i > length + 1)
throw "Error: 插入位置异常";
for (int j = length; j >= i; j--) {
data[j] = data[j - 1];
}
data[i - 1] = x;
length++;
}
template<class DataType>
DataType MyList<DataType>::Delete(int i) {
if (length == 0)
throw "Error: 下溢";
if (i < 1 || i > length)
throw "Error: 删除位置异常";
DataType x = data[i - 1];
for (int j = i; j < length; j++) {
data[j - 1] = data[j];
}
length--;
return x;
}
template<class DataType>
void MyList<DataType>::PrintList() {
cout<<"开始遍历:"<<endl;
for (int i = 0; i < length; i++) {
cout << "元素 "<<i<<" "<<data[i]<<endl;
}
cout<<endl;
}
int main() {
int x[] = {1, 2, 3, 4, 5};
MyList<int> myList(x,5);
cout<<"长度 "<<myList.Length()<<endl;
cout<<"1 的位置是"<<myList.Locate(1)<<endl;
cout<<"删除 "<<myList.Delete(1)<<" 成功"<<endl;
myList.PrintList();
string str[] = {"Hello_1","Hello_2","Hello_3"};
MyList<string> list_1(str,3);
list_1.PrintList();
try{
//MyList<int> list_2(x,101);
list_1.Get(5);
}catch(const char* msg){
cerr<<msg<<endl;
}
}
#include<iostream>
using namespace std;
//线性表大小
const int maxSize = 100;
//定义模板类
template<class DataType>
class MyList
{
public:
//无参构造函数 建立一个空顺序表
MyList()
{
length = 0;
}
MyList(int len)
{
length=len;
}
//含参构造函数
MyList(DataType a[], int n);
//析构函数
~MyList() {};
//求线性表的长度
int Length()
{
return length;
}
//获取i位置的数据
DataType Get(int i);
//求x的位置
int Locate(DataType x);
//插入x到位置i
void Insert(int i, DataType x);
//删除i处的数据
DataType Delete(int i);
//打印整个线性表
void PrintList();
private:
DataType data[maxSize];
int length;
};
template<class DataType>
MyList<DataType>::MyList(DataType a[], int n)
{
if (n > maxSize)
throw "Error: list.length > maxSize";
for (int i = 0; i < n; i++)
{
data[i] = a[i];
}
length = n;
}
template<class DataType>
DataType MyList<DataType>::Get(int i)
{
if (i < 1 || i > length)
throw "Error: 位置非法";
else
return data[i - 1];
}
template<class DataType>
int MyList<DataType>::Locate(DataType x)
{
for (int i = 0; i < length; i++)
{
if (data[i] == x)
return i + 1;
}
return 0;
}
template<class DataType>
void MyList<DataType>::Insert(int i, DataType x)
{
if (length >= maxSize)
throw "Error: 上溢";
if (i < 1 || i > length + 1)
throw "Error: 插入位置异常";
for (int j = length; j >= i; j--)
{
data[j] = data[j - 1];
}
data[i - 1] = x;
length++;
}
template<class DataType>
DataType MyList<DataType>::Delete(int i)
{
if (length == 0)
throw "Error: 下溢";
if (i < 1 || i > length)
throw "Error: 删除位置异常";
DataType x = data[i - 1];
for (int j = i; j < length; j++)
{
data[j - 1] = data[j];
}
length--;
return x;
}
template<class DataType>
void MyList<DataType>::PrintList()
{
cout<<"开始遍历:"<<endl;
for (int i = 0; i < length; i++)
{
cout << "元素 "<<i+1<<": "<<data[i]<<endl;
}
cout<<endl;
}
int main()
{
//键盘输入10个数据元素,利用顺序表的基本操作,建立该表
MyList<int> mylist;
for(int i=0; i<10; i++)
{
cout<<"请输入数据元素 "<<i+1<<" :"<<endl;
int temp;
cin>>temp;
mylist.Insert(i+1,temp);
}
mylist.PrintList();
//利用顺序表的基本操作,找出表中的最大的和最小的数据元素
int maxNum=mylist.Get(1);
int minNum=mylist.Get(1);
for(int i=0; i<mylist.Length(); i++)
{
if(mylist.Get(i+1)>maxNum)
{
maxNum=mylist.Get(i+1);
}
if(mylist.Get(i+1)<minNum)
{
minNum=mylist.Get(i+1);
}
}
cout<<"最大数据元素 :"<<maxNum<<endl<<"最小数据元素 :"<<minNum;
}