线性表的逻辑结构

线性表的定义:用数据元素的有限序列表示的表,我们称之为线性表
比如 a1,a2,a3,a4…an,其中a1就是线性表的起点,而a1中的下标1表示的就是元素的序号,它表示了这个元素在线性表中的位置,而相对a2来说它的直接前驱就是a1,而它的直接后继就是a3,而an中n表示的就是这个线性表的长度.
注意:同一个线性表具有相同的特性,相邻的数据元素之间是序偶关系(表示的就是有序成对的意思)
《线性表的逻辑结构》
比如上面这幅图所描述的,上面这幅图的数据元素都是字母,而元素之间的关系都是线性的,而每一个数据都包含了学号,姓名,性别,年龄,班级这几样特性.所以说它们之间是存在相同的特性的.
这样说吧,线性表就是n个具有相同特性的数据元素的有限序列,我们日常中使用的线性表包括:顺序表,链表,栈,队列,字符串等
我们在之前的学习中也知道,数据的存储包括两种存储方式,顺序存储 链式存储,而线性表在逻辑上线性结构,也就是连续的一条直线,在物理上存储时,通常以数组和链式结构的形式来进行存储
总结下来就是,线性表的存储在逻辑上上连续的一条线,进行线性存储的,而在物理存储上,线性表的存储是满足数组和链式结构相结合的形式来进行存储的通常以数组和链式结构的形式存储。
下面这张图最能体现链式存储的物理存储结构
《线性表的逻辑结构》
顺序表
线性表的顺序表示又称为顺序存储结构或者顺序映像
顺序存储的定义:把逻辑上相邻的存储元素存储在物理上相邻的存储单元的存储结构
就是逻辑上相邻,物理上也是相邻的
顺序存储实现的方法:用一组地址连续的存储单元依次存储线性表的元素
一般情况下采用数组来进行存储,在数组上来完成数据的增删改查
我们来看一张图
《线性表的逻辑结构》
我们可以看到线性表的顺序存储结构,就是按照物理上的存储关系来进行存储的,空间不一定占满,但是可以看到的是存储上体现的一个顺序性,以及每个元素存储时所占的空间的大小是相同的.
我们来看下面一道题
《线性表的逻辑结构》
根据线性表的顺序存储结构的存储规律,我们可以根基公式得出98+5*3=113
我们来看这样一道题
《线性表的逻辑结构》

用数组V来存放26个英文字母组成的线性表,写出顺序结构上生成和显示该表的C语言程序

顺序表一般可以分为两种
1.静态顺序表:使用定长的数组来进行存储
2.动态顺序表:使用动态开辟的数组来进行存储
//顺序表的静态存储
#define N 100//表示了这个数组是一个定长数组,那么它的大小就是确定的,即为静态顺序表
typedef int SLDataType;
typedef struct SeqList
{
SLDataType array[N];//定长数组
size_t size;//有效数据的个数,表示在这个定长的数据表中所占的空间的大小
}; SeqList;
//顺序表的动态存储
typedef struct SeqList
{
SLDataType*array;//指的是动态开辟的数组
size_t size;//有效数据的个数
size_t capicity;//容量空间的大小
}SeqList;
在这种情况下使用的都是当空间不够时再进行扩容
顺序表的实现
首先,我们要明白数据结构的基本操作有:修改,插入,删除,查找,排序
首先,我们来说一说修改
具体的操作过程:通过数组的下标来访问某个特定的元素,并且将其进行修改
上述操作提到的数组下标以及某个特定的元素,所以它的核心语句就为V[i]=x;
按照这种逻辑,顺序表的进行修改的时间复杂度就是根据数组的下标来访问特定的元素来修改其内容,所以它的时间复杂度就为T(n)=O(1)
插入
在线性表的第i个位置上插入一个元素该怎么实现那
首先如果该元素要插到第i个元素的位置,那么第i个元素之后的元素都要向后移动
然后将要插入的元素写在第i个位置
并且将顺序表的表长要+1
具体实现的代码如下

删除删除线性表上第i个位置上的元素
实现步骤(与插入不同的是,少了插入的部分)
1.将i之后i+1的位置向前移动一个位置
2.将这个顺序表的表长减1
但是需要注意的是,i的范围是要确定的1<=i<=n
具体实现的代码如下

练习
《线性表的逻辑结构》

关于插入和删除的时间复杂度
关于插入的时间复杂度
首先我们来想一下插入的三种情况
1.头插,这种的时间复杂度是最高的,当头插执行后,需要将头以后的所有元素向后移动一位,所以时间复杂度T(n)=o(n+1)(注意此处是o(n+1)因为是这个数组是从第0项开始的,那么它就有n+1项
2.尾插,这种的时间复杂度是最低的,执行了尾插之后,前面的元素都不需要进行移动,所以它的时间复杂度为T(n)=o(1)
所以我们可以说,在不同的位置插入元素,得到的结果也是不同的
所以我们可以求出所有可能的元素的移动次数:0+1+2+3+…n+1=n(n+1)/2
所以平均次数即为n/2,按照大O渐进法来表示就是O(n)
同理可证,顺序表删除一个元素的时间效率为O(n)
空间复杂度
按照我们之前的评判标准,只要算法不涉及空间的分配,递归,栈需要的空间,通常的空间复杂度为O(1),所以顺序表的删除和插入的空间复杂度为O(1)

    原文作者:bingXxx
    原文地址: https://blog.csdn.net/bingXxx/article/details/84865172
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞