顺序表
Posted suomeimei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表相关的知识,希望对你有一定的参考价值。
顺序表的一般特性
- 顺序表的内存空间是一连串的地址空间
- 与数组需要一个唯一的数组名一样,顺序表也需要有一个唯一的表名来表示
- 数据在顺序表中按先后顺序排序,存取时可根据相对位置进行随机存取
顺序表数据结构
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; //内存回收 } int getLength() { return length; } bool insertElement(DataType data); //向表尾插入新元素 bool deleteElement(int location); //删除指定位置的元素 DataType getElement(int location); //返回指定位置的元素 bool changeElement(int location,DataType newData); //修改指定位置的元素值 private: DataType *elements; int maxSize; //顺序表最大大小 int length; //顺序表的有效长度 };
顺序表插入操作
template<typename DataType> bool SeqList<DataType>::insertElement(DataType data) { int currentIndex = length; //记录新元素的插入位置 if (length>=maxSize) //判断顺序表是否已满 { return false; //顺序表已满,返回false,插入不成功 } else { elements[currentIndex] = data; //将新元素插入到顺序表表位 length++; return true; } }
删除指定位置的元素
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--; //顺序表长度减一 return true; } }
获取指定位置的元素
template<typename DataType> DataType SeqList<DataType>::getElement(int location) { if (location<0||location>length) //判断位置索引是否合法 { std::cout << "参数无效" << endl; } else { return elements[location]; //返回指定位置的元素 } }
修改指定位置的元素
template<typename DataType> bool SeqList<DataType>::changeElement(int location, DataType newData) { if (location<0||location>=length) //验证位置索引参数是否有效 { return false; } else { elements[location] = newData; //将新元素赋给指定位置 return true; } }
测试
int main() { SeqList<int> list(10); //建立顺序表 for (int i = 0; i < 10; i++) list.insertElement(i); //插入数据实现初始化 for (int i = 0; i < list.getLength(); i++) cout << list.getElement(i) << " "; //输出初始化后的顺序表 cout << endl; list.deleteElement(3); //删除索引为3的元素 for (int i = 0; i < list.getLength(); i++) cout << list.getElement(i) << " " ; //输出删除后的顺序表 cout << endl; list.changeElement(5, 44); //将顺序表索引为5的元素修改为44 for (int i = 0; i < list.getLength(); i++) cout << list.getElement(i) << " "; //输出修改后的顺序表 cout << endl; return 0; }
结果
以上是关于顺序表的主要内容,如果未能解决你的问题,请参考以下文章