Thursday, May 7, 2015

順序表


順序表是線性表的一種儲存表現方式,如上圖,是一塊連續的內存空間。數組(Array)就是一順序表。
  • 內存空間是一連串的地址空間
  • 需要一個唯一的表名
  • 可根據對態位置進行存取
###基本的順序表結構
```c++
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;//最大大小
   
};

```

現在來加入元素的基本操作
```C++
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
```C++
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
```C++

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
```C++
template <typename DataType> DataType SeqList<DataType>::getElement(int location){
   
    if(location < 0 || location > length){  //檢查參數是否有效
        cout << "參數無效" << endl;
        return 0;
    }else{
        return elements[location];
    }
   
}

```

###修改指定位置的元素     changeElement
```C++
template <typename DataType> bool SeqList<DataType>::changeElement(int location, DataType newData){
   
    if (location < 0 || location >= length) {   //檢查參數是否有效
        return false;
    }else{
        elements[location] = newData;   //賦予新元素給指定位置
        return true;
    }
   
}
```

--------------------------------
此博客全部文章同步在:
http://onenode.gitcafe.io
http://blog.csdn.net/leonghouheng




No comments:

Post a Comment