欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Data Structure] 2.数组列表

程序员文章站 2024-03-18 09:16:04
...

需注意,数据结构中的数据类型储存的都是“结构”,如下面的数组列表,虽然是基于数组,但是不像之前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();
   
}
相关标签: 数据结构