顺序表

基本知识:
(1)线性表主要有两种储层方式:顺序存储和链式存储
(2)用顺序存储方式存储线性表称为顺序表,顺序表可以随机访问,它可以通过元素的位置来访问数据元素,存储空间在物理上是连续的;即在逻辑上相邻的数据元素在物理上也必然相邻;
(3)线性表的基本操作常见的有:初始化、求长度、取指定元素的值、元素定位、修改指定元素的值、插入、删除、判断表是否为空、表清空等等
(4)在插入和删除时需要移动元素,顺序表的时间复杂度为O(n);
(5)顺序表类模板定义:(注:有几个成员函数还没有实现,VS不支持类模板与其实现方式分文件编译,均放在头文件中)

实现代码:

#ifndef GUARD_seqlist_h
#define GUARD_seqlist_h
#include<iostream>
using namespace std;
template<class ElemType>
class SeqList{
public:
    SeqList(int size);//默认构造函数
    SeqList(ElemType v[],int n,int size);//根据数组v构造顺序表
    virtual ~SeqList();
    int GetLength()const;//取顺序表长度
    bool IsEmpty() const;
    void clear();//元素清空
    void Traverse(void(*Vist)(const ElemType&))const;//元素遍历
    int LocateElem(const ElemType& e);//元素定位
    void SetElem(int i,const ElemType& e);//修改第i个元素
    void DelElem(int i);//删除顺序表第i个值
    void InsElem(int i,const ElemType& e);//在第I个位置插入元素
    void InBackElem(ElemType& e);//在表尾插入元素;
    SeqList(const SeqList<ElemType>& s);//复制构造函数

private:
    int length;
    int maxLength;
    ElemType* elems;
};
template<class ElemType>
SeqList<ElemType>::SeqList(int size){
    elems=new ElemType[size];
    assert(elems);
    length=0;
    maxLength=size;

}

template<class ElemType>
int SeqList<ElemType>::GetLength()const{
    return length;

}
template<class ElemType>
SeqList<ElemType>::SeqList(ElemType v[],int n,int size){
    elems=new ElemType[size];
    length=n;
    maxLength=size;
    for(int i=0;i<length;i++)
        elems[i]=v[i];
}

template<class ElemType>
SeqList<ElemType>::~SeqList(){
    delete []elems;
}

template<class ElemType>
void SeqList<ElemType>::clear(){
    length=0;
}

template<class ElemType>
int SeqList<ElemType>::LocateElem(const ElemType& e){
    int i=0;
    while(i<length&&elems[i]!=e)
        i++;
        return i<length?(i+1):0;
}


template<class ElemType>
void SeqList<ElemType>::SetElem(int i,const ElemType& e){
    if(i<1||i>length)
        std::cout<<"RANGE_ERROR"<<std::endl;
    else{
        elems[i-1]=;
        std::cout<<"SUCCESS"<<std::endl;
    }
}


template<class ElemType>
void SeqList<ElemType>::DelElem(int i){
    if(i<1||i>length)
    {
        std::cout<<"RANGE_ERROR"<<std::endl;

    }
    else{
        ElemType e=elems[i-1];
        for(int j=i;j<length;j++)
            elems[j-1]=elems[j];
        length--;
        std::cout<<"SUCCESS"<<std::endl;
    }

}

template<class ElemType>//相当于要把插入元素之后的元素都要后移动一个位置
void SeqList<ElemType>::InsElem(int i,const ElemType& e){
    if(i<1||i>length+1)
        std::cout<<"RANGE_ERROR"<<std::endl;
    else if(length==maxLength)
        std::cout<<"OVER_FLOW"<<std::endl;
    else{
        for(int j=length;j>=i;j--)
            elems[j]=elems[j-1];
        elems[i-1]=e;
        length++;
    }
}

template<class ElemType>
void SeqList<ElemType>::InBackElem(ElemType& e){
    if(length==maxLength)
        std::cout<<"OVER_FLOW"<<std::endl;
    else{
        elems[length]=e;
        length++;
    }
}
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值