C++数据结构之线性表操作

来源:互联网 发布:淘宝怎么设置价格区间 编辑:程序博客网 时间:2024/05/08 21:57

 

#include <iostream>

using namespace std;

const int MaxSize = 100;//定义线性表的最大长度

template <typename T>      //定义模板类SeqList

class SeqList
{
    private:
        int data[MaxSize];                //存放数据元素的数组
        int length;                     //线性表的长度typename
    public:
        SeqList(){ length = 0;}         //无参构造函数
        SeqList(int a[], int n);          //有参构造函数
        ~SeqList(){}                    //析构函数为空
        int Length() { return length;}  //求线性表的长度
        int Get(int i);                 //按位查找,取线性表的第i个元素
        int Locate(int x);              //按值查找,取线性表中值为x的元素序号
        void Insert(int i, int x);        //在线性表中第i个位置插入值为x元素
        int Delete(int i);                //删除线性表的第i个元素
        void PrintList();               //遍历线性表,按序号依次输出个元素
};

template <typename T>
SeqList<T>::SeqList(int a[], int n)
{
    if(n > MaxSize)
        throw "参数非法";
    for(int i = 0;i < n; i++)
    {
        data[i] = a[i];
    }
    length = n;
}

template <typename T>
int SeqList<T>::Get(int i)
{
    if(i < 1 || i > length)
        throw "查找位置非法";
    else
        return data[i-1];
}

template <typename T>
int SeqList<T>::Locate(int x)
{
    for(int i = 0; i < length ; i++)
    {
        if(data[i] == x)
            return i+1;
        return 0;
    }
}

template <typename T>
void SeqList<T>::Insert(int i, int x)
{
    if(i > MaxSize)
        throw "上溢";
    if(i < 1 || i > length + 1)
        throw "位置异常";
    for(int j = length ; j >= i; j--)
    {
        data[j] = data[j-1];
    }
    data[i-1] = x;
    length++;
}

template <typename T>
int SeqList<T>::Delete(int i)
{
    if(length == 0)
        throw "下溢";
    if(i < 1 || i > length)
        throw "位置异常";
    int x =data[i-1];
    for(int j = i; j < length; j++)
    {
        data[j-1] = data[j];
    }
    length--;
    return x;
}

template <typename T>
void SeqList<T>::PrintList()
{
    for(int i = 0; i < length; i++)
    {
        cout<<data[i]<<" ";
    }
}

int main()
{
    int L[]={21,23,16,46,65,17,31,9};
    SeqList<int> SeqL(L,8);
    cout<<"初始线性表的内容:"<<endl;
    SeqL.PrintList();
    cout<<endl;
    SeqL.Insert(4,68);
    cout<<"进行插入(4,68)后的线性表:"<<endl;
    SeqL.PrintList();
    cout<<endl;
    SeqL.Delete(7);
    cout<<"进行删除位置(7)后的线性表:"<<endl;
    SeqL.PrintList();
    return 0;
}

原创粉丝点击