順序表[妙趣橫生的算法C++讀書筆記]

順序表[妙趣橫生的算法C++讀書筆記]

此处输入图片的描述
順序表是線性表的一種儲存表現方式,如上圖,是一塊連續的內存空間。數組(Array)就是一順序表。
內存空間是一連串的地址空間
需要一個唯一的表名
可根據對態位置進行存取

基本的順序表結構

const int defaultSize = 10;
template <typename DataType> class SeqList{
public:
    SeqList(int size = defaultSize){
        if (size > 0) { //檢查是否合法
            maxSize = size;
            elements = new DataType[maxSize];//分配內存
        }
    }

    ~SeqList(){
        delete[] elements;//回收內存空間
    }

private:
    DataType * elements;
    int maxSize;//最大大小

};

現在來加入元素的基本操作

const int defaultSize = 10;
template <typename DataType> class SeqList{
public:
    SeqList(int size = defaultSize){
        if (size > 0) { //檢查是否合法
            maxSize = size;
            elements = new DataType[maxSize];//分配內存
        }
    }

    ~SeqList(){
        delete[] elements;//回收內存空間
    }

    bool insertElement(DataType data);//表尾插入新元素
    bool deleteElement(int location);//刪除指定地址的元素
    DataType getElement(int location);//取得指定地址的元素
    bool changeElement(int location, DataType newData);//改變指定地址的元素
    int getLength(){
        return length;
    }
private:
    DataType * elements;
    int maxSize;//最大大小
    int length;//表的有效長度

};

表尾插入新元素 insertElement

template <typename DataType> bool SeqList<DataType>::insertElement(DataType data){

    int currentIndex = length;  //新元素插入的位置
    if (length >= maxSize) {
        return false;
    }else{
        elements[currentIndex] = data;  //插入新元素到表尾
        length++;   //表的有效長度+1
        return true;
    }

}

刪除元素 deleteElement

template <typename DataType> bool SeqList<DataType>::deleteElement(int location){

    if (location >= length || location < 0) {   //檢查參數是否有效
        return false;
    }else{
        for (int i = location; i < length; i++) {
            elements[i] = elements[i+1];    //把刪除了的元素後一位的元素往前移動以覆蓋已刪除的元素位址
        }
        length--;   //表的長度-1
        return true;
    }

}

步驟:
steps

取得指定位置的元素 getElement

template <typename DataType> DataType SeqList<DataType>::getElement(int location){

    if(location < 0 || location > length){  //檢查參數是否有效
        cout << "參數無效" << endl;
        return 0;
    }else{
        return elements[location];
    }

}

修改指定位置的元素 changeElement

template <typename DataType> bool SeqList<DataType>::changeElement(int location, DataType newData){

    if (location < 0 || location >= length) {   //檢查參數是否有效
        return false;
    }else{
        elements[location] = newData;   //賦予新元素給指定位置
        return true;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值