順序表[妙趣橫生的算法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;
    }

}

步驟:

取得指定位置的元素 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;
    }

}

你可能感兴趣的:(算法)