目录
概念:
n个具有相同特性的数据元素的有限序列
常见的顺序表有:顺序表、链表、栈、队列、字符串等逻辑结构:一条线,即一个元素接着一个元素,类似于:1-2-3-4-5-6-7-。。。
逻辑结构:一条线,即一个元素接着一个元素,类似于:1-2-3-4-5-6-7-。。。
物理结构:即数据在计算机内的实际存储结构,通常以数组和链式结构的形式存储
通常使用数组来实现顺序表,有两种方式:
静态顺序表:定长数组
动态顺序表:申请动态数组
但是,推荐使用动态数组实现,相较于静态更灵活方便
以下是定义方式:
在编程中,可以写一个头文件管理代码,管理函数的声明
一个.c文件管理函数的具体实现代码,
一个.c文件main函数测试,例如:
初始化顺序表:
在动态分配内存时,因为有分配内存失败的可能,所以每次分配都要进行检验,增加程序容错
断言assert函数,用于终止程序
头文件是:include<assert.h>
顺序表从头开始,依次存储,其具有的基本操作有如下四种:
头插、尾插、头删、尾删、随机插入、随机删除
在写代码时,建议:一个函数一个函数的写,一个接口一个接口的实现,简单,通透
头插:
数据从头部前插入
空表:直接插入
非空表:所有的数据往后移动一位,
然后在第一个位置即0位置索引位置添加元素即可,然后size++
满表:扩容,再插入
如图所示:
尾插:
数据从最尾端插入
空表或者未满表直接插入
满表扩容再插入
size记录的是最后一个元素的下一个位置的位置,
无需位置移动
直接加入数据,size++,如图:
随机插入:任意位置插入数据(需断言:即位置属于合适位置)
头删:
从头部开始删除数据
直接将数据从后往前挪动即可
定义一个start = 0记录头位置,往前移动一个,start++,直到start == size停止
尾删:
从尾部开始删除
直接size--即可
源码:
头文件:
函数定义:
测试:
顺序表优缺点:
动态顺序表的优点:
1、插入数据,空间不够会扩容
2、要求数据是依次存储
缺点:
1、造成空间浪费,比如,100个元素满了之后只要加一个元素,但是空间却是200
2、头部或者中部位置插入数据和删除效率低,因为都要移动n个数据,时间复杂度是O(N)
而链表的结构就正好解决了这样的缺问题:关于链式存储,请看博主另外的博客。
1、空间上,按需求分配空间,你要几个我就给你几个空间
2、不要求物理空间连续,头部和中间的插入就不需要挪动位置