注册 登录
编程论坛 C++教室

如何用c++实现静态链表的插入删除

草种的幸福 发布于 2012-11-13 21:15, 2873 次点击
如何用c++实现静态链表的插入删除
3 回复
#2
寒风中的细雨2012-11-13 23:19
构造类  定义对象  操作对象
#3
chenhm19912012-11-14 22:01
//顺序线性表
#include <iostream>
using namespace std;
const int MaxSize=100;
template <typename T>
class SeqList
{
    public:
        SeqList(){length=0;}                 //无参构造函数
        SeqList(T a[],int n);                //有参构造函数
        ~SeqList(){}                         //析构函数为空
        int Length(){return length;}         //求线性表的长度
        T Get(int i);                        //按位查找,返回顺序表的第i个元素
        int Locate(T x);                     //按值查找,求线性表中值为x的元素序号
        void Insert(int i,T x);              //在线性表中第i个位置插入元素x
        T Delete(int i);                     //删除线性表中第i个元素
        void PrintList();                    //遍历线性表,按序号依次输出各元素
    private:
        T data[MaxSize];                     //存放数据元素的数组
        int length;                          //线性表的长度
};
//有参构造函数
template <typename T>
SeqList<T>::SeqList(T a[],int n)
{
    if(n>MaxSize)
        throw "参数非法";
        for(int i=0;i<n;++i)
            data[i]=a[i];
        length=n;
}
//插入操作,在线性表中第i个位置插入元素x
template <typename T>
void SeqList<T>::Insert(int i,T x)
{
    if(length>=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++;
}
//删除操作,删除线性表中第i个元素
template <typename T>
T SeqList<T>::Delete(int i)
{
    if(length==0)
        throw "下溢";            //表空
    if(i<1||i>length)
        throw "超出范围";
    T x=data[i-1];
    for(int j=i;j<length;++j)
        data[j-1]=data[j];
    length--;
    return x;
}
//按位查找,返回顺序表的第i个元素
template <typename T>
T SeqList<T>::Get(int i)
{
    if(i<1||i>length)
        throw "输入范围错误";
    else
        return data[i-1];
}
//按值查找,求线性表中值为x的元素序号
template <typename T>
int SeqList<T>::Locate(T x)
{
    for(int j=0;j<length;++j)
    {
        if(data[j]==x)
            return j+1;
    }
    return 0;        //说明查找失败
}
template <typename T>
//输出线性表
void SeqList<T>::PrintList()
{
    cout<<"The SeqList is :"<<endl;
    for(int i=0;i<length;++i)
        cout<<data[i]<<' ';
    cout<<endl;
}
#4
chenhm19912012-11-14 22:02
//顺序线性表
#include <iostream>
using namespace std;
const int MaxSize=100;
template <typename T>
class SeqList
{
    public:
        SeqList(){length=0;}                 //无参构造函数
        SeqList(T a[],int n);                //有参构造函数
        ~SeqList(){}                         //析构函数为空
        int Length(){return length;}         //求线性表的长度
        T Get(int i);                        //按位查找,返回顺序表的第i个元素
        int Locate(T x);                     //按值查找,求线性表中值为x的元素序号
        void Insert(int i,T x);              //在线性表中第i个位置插入元素x
        T Delete(int i);                     //删除线性表中第i个元素
        void PrintList();                    //遍历线性表,按序号依次输出各元素
    private:
        T data[MaxSize];                     //存放数据元素的数组
        int length;                          //线性表的长度
};
//有参构造函数
template <typename T>
SeqList<T>::SeqList(T a[],int n)
{
    if(n>MaxSize)
        throw "参数非法";
        for(int i=0;i<n;++i)
            data[i]=a[i];
        length=n;
}
//插入操作,在线性表中第i个位置插入元素x
template <typename T>
void SeqList<T>::Insert(int i,T x)
{
    if(length>=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++;
}
//删除操作,删除线性表中第i个元素
template <typename T>
T SeqList<T>::Delete(int i)
{
    if(length==0)
        throw "下溢";            //表空
    if(i<1||i>length)
        throw "超出范围";
    T x=data[i-1];
    for(int j=i;j<length;++j)
        data[j-1]=data[j];
    length--;
    return x;
}
//按位查找,返回顺序表的第i个元素
template <typename T>
T SeqList<T>::Get(int i)
{
    if(i<1||i>length)
        throw "输入范围错误";
    else
        return data[i-1];
}
//按值查找,求线性表中值为x的元素序号
template <typename T>
int SeqList<T>::Locate(T x)
{
    for(int j=0;j<length;++j)
    {
        if(data[j]==x)
            return j+1;
    }
    return 0;        //说明查找失败
}
template <typename T>
//输出线性表
void SeqList<T>::PrintList()
{
    cout<<"The SeqList is :"<<endl;
    for(int i=0;i<length;++i)
        cout<<data[i]<<' ';
    cout<<endl;
}
1