1.线性表是由相同数据类型的 n 个数据元素 a0,a1 ... an−1 组成的有限序列。一个数据元素可以由若干个数据项组成。若用 L 命名线性表,则其一般表示如下:
L=(a0,a1,...,an−1)
其中, a0 是唯一的“第一个”数据元素,又称为表头元素;an−1 是唯一的“最后一个”数据元素,又称为表尾元素。线性表按照存储结构,可以分为顺序表和链表两种类型。
2.顺序表是在计算机内存中以数组形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
3.顺序表最主要的特点是可以进行 随机访问,即可以通过表头元素的地址和元素的编号(下标),在 O(1) 的时间复杂度内找到指定的元素。
顺序表的不足之处是插入和删除操作需要移动大量的元素,从而保持逻辑上和物理上的连续性。
4.顺序表的构造,插入,扩容,删除,遍历
#include #include using namespace std; class Vector { private: int size, length; //顺序表当前的最大容量和当前顺序表中的元素个数 int *data; //动态分配,指向存储元素的数组的指针 public: Vector(int input_size) { //构造函数,构造一个容量为input_size的顺序表 size = input_size; length = 0; data = new int[size]; //让data指向一段连续size个int空间 } ~Vector() { //析构函数 delete[] data; //将data指向的空间回收 } bool insert(int loc, int value) {//顺序表的插入 if (loc < 0 || loc > length) {//判断插入的位置是否合法 return false; } if (length >= size) { //判断容量是否已经达到上限 return false; //这句可注释掉并调用扩容操作 } for (int i = length; i > loc; --i) { //loc位置后元素后移 data[i] = data[i - 1]; } data[loc] = value; length++; return true; } void expand(){ //顺序表的扩容 int *old_data=data; size=size*2; data=new int[size]; for(int i=0;i = length) { return false; } for (int i = index + 1; i < length; ++i) { data[i - 1] = data[i]; } length = length - 1; return true; } void print() { //顺序表的遍历 for(int i=0;i 0){ cout<<" "; } cout<