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