什么是线性表&特点、顺序表(静态存储&动态存储)

什么是线性表?

线性表是具有相同数据类型的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

先写到这,明日接着更~

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章