#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;
}