一、线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结
构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物
理上存储时,通常以数组和链式结构的形式存储。
二、顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组
上完成数据的增删查改。
顺序表一般可以分为两种:
1、静态顺序表:使用定长数组存储元素。
2、 动态顺序表:使用动态开辟的数组存储。
三、顺序表实现
首先顺序表也是一个结构体,但是数据是存放在内存中,而且数据是一个连续存放的,有点像数组的存储方式,所以想实现,首先就是初始化和销毁,如下图代码。
首先是结构体定义,首先就是需要存放数据的地址,数据地址的容量,和数据大小,也就是放入的数据大小,初始化就是申请地址空间,然后把容量存入capacity,然后size大小赋值为0。
然后就是顺序表的打印,只需要遍历一遍数据表内的数据,并且打印出来就可以,而数据大小就是size。
初始化结束了就是放入数据了,首先是尾插如下图,放入数据时只需要size的地方放入数据,如size为0时就是head头,然后每放入一个size++,就会放入到尾部,然后还需要检查下内存是否还够,如果不够就是当size等于capacity也就是容量时,进行扩容,这里是扩容两倍。
测试数据如图。
接着就是头插,头插数据和尾插有点不一样,首先头插要把数据先向后移动一位,然后把数据放在第一位,也就是0。
测试数据如图
头插和尾插后就是头删和尾删,尾删就简单了,就是直接把size--直接覆盖就可以了,不过还是要先断言检查下,头删就是把第一个数据覆盖就行了。
头删测试数据如图
尾删测试数据如图
紧接着就是在中间插入,有点和头插差不多,只不过把头换成了中间的位置,这样就可以完成中间插入和中间删除。
测试数据如图。
然后有这个中间的插入和删除,所以头插和尾插就可以用直接调用如下:
头插SeqListInsert(ps, 0, x);
尾插SeqListInsert(ps, ps->size, x);
头删SeqListErase(ps, 0);
尾删SeqListErase(ps, ps->size);
接着就是查找了,这里直接遍历就可以了,查到返回下标,找不到返回-1。
测试数据如图