什么是线性表?
线性表是具有相同数据类型的n个元素的有限序列
1.线性表(逻辑结构)的存储结构分为顺序表和链表
- 线性表是具有相同数据类型的n个数据元素的有穷集合 -- 它是一种逻辑结构。
- 线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层面的概念,因此不能互相混淆。
- 也就是说线性表这一种逻辑结构对应的的存储结构分为顺序表和链表
2.线性表特点:
有限性:元素个数有限
逻辑上的顺序性:排序有先后顺序
每个元素都相同大小的存储空间,因为表中元素数据类型都相同
表中元素具有抽象性,但我们仅讨论元素间的逻辑关系我们不在意元素究竟表示什么内容。
3.比如↓↓↓
例:线性表是具有n个(数据元素)的有限序列。(数据库中的一条记录就是一组数据元素。)
例:集合不是线性表(不满足顺序性),所有整数组成的序列不是线性表(不满足有穷性),邻接表不是线性表(是一种存储结构,而线性表是逻辑结构,在此不能相提并论)
我们一定要理解线性表,以及其与顺序表、链表的区别!!!下面我们看线性表顺序存储结构和链式存储结构~
线性表的顺序存储结构
也称顺序表,用一组物理地址连续的存储单元依次存储线性表中的数据元素,从而使逻辑上相邻的元素物理位置也相邻。表中的逻辑位置与物理位置相同!线性表位序从1开始,数组下标从0开始
顺序存储有两种描述方式:
1.静态分配方式
#define MaxSize 50 typedef struct{ ElemType data[MaxSize]; int length; }SqList;
这是静态分配的,数组的大小和空间事先已经固定,一旦空间占满,再加入新的数据就会溢出,进而导致程序崩溃!
2.动态分配方式
#define InitSize 100 //表长度的初始定义 typedef struct{ ElemType *data; //指示动态分配数组的指针 int MaxSize, length;//数组的最大容量和当前个数 }SeqList;
动态分配时,存储数组的空间是在程序执行的过程中通过动态分配语句分配的,一旦数据空间占满,就另外开辟一块更大的存储空间,用以替换原来的存储空间,从而达到扩充数据存储空间的目的,而不需要为线性表一次性的划分所有的空间。
- C的初始动态分配语句:L.data = (ElemType*)malloc(sizeof(ElemType)* InitSize);
- C++的初始动态分配语句:L.data = new ElemType(InitSize);
PS:动态分配不是链式存储,它同样属于顺序存储结构,物理结构没有变化,依然是随机存取方式,只是分配时的大小可以在运行时决定。
数据表完整代码实现:https://blog.csdn.net/lady_killer9/article/details/82695770
先写到这,明日接着更~