[Data Structure]02.数组列表

需注意,数据结构中的数据类型储存的都是“结构”,如下面的数组列表,虽然是基于数组,但是不像之前acmn中那样一个数据类型表示一个数,而是表示一个列表。
故声明私有成员时,E *listarr; 用于存放数组的指针位置。

#include <iostream>
using namespace std;

template <typename E>
class AList {
    private:
        int maxsize; //列表的最大容量
        int listsize; //当前列表的元素个数
        int curr; //当前元素的数组下标,用于插入时为动作指路
        E *listarr;
    
    public:
        AList(){}
        AList(int size) //constructor
        {
            maxsize = size;
            listsize = -1;
            curr = 0;
            listarr = new E[size];
        }
    
    ~AList(){}//destructor
    
    void clear(){ //清空整个列表
        delete []listarr;
        curr = 0;
        listsize = -1;
        listarr = new E[maxsize];
    }
    
    void insert(const E& it){
     //   Assert(listsize < maxsize, "数组越界!"); //这句话用来检查数组越界
        for(int i = listsize; i > curr; i--)
            listarr[i] = listarr[i-1];
        listarr[curr] = it;
        listsize++;
    }
    
    void append(const E& it){
      //  Assert(listsize < maxsize, "数组越界!");
        listarr[listsize++] = it;
    }
    
    E remove()
    {
     //   Assert(listsize < maxsize, "数组越界!");
        E leave = listarr[curr];
        for(int i = curr; i < listsize; i++)
            listarr[i] = listarr[i+1];
        listsize--;
        return leave;
    }
    
    void modicurr(int num){
      //  Assert((num <= listsize) && (num >= 0), "数组越界!");
        curr = num;}
    //书上写了若干函数用于更改curr,我保留prev和next函数,其他全部合成这一个modicurr函数
    //仅作修改curr的功能
    
    void prev(){ if(curr !=0) curr--;}
    void next(){ if(curr<listsize) curr++;}
    int length() const { return listsize+1;}
    int  currpos() const{ return curr;}
    
    const E& getvalue() const{ //返回当前的元素
        //Assert((curr <= listsize) && (curr >= 0), "当前查询出错!");
        return listarr[curr];
    }
};

int main() {
    AList <int>test;
    test = AList<int>(4);
    test.insert(1);test.insert(2);test.insert(3);test.insert(4);
    //注意,这样做相当于在反向插入
    test.modicurr(2);
    cout<<test.getvalue();
   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值