算法与数据结构之线性表

本文介绍了线性表的概念,强调了数据元素的同类型、有限数量、有序及逻辑关系。线性表的存储方式包括顺序存储(数组实现)和链式存储(链表实现)。数组查找时间为O(1),插入和删除平均时间复杂度为O(n)。链表查找时间为O(n),插入和删除时间为O(1)。详细解析了两种存储结构的操作过程和时间复杂度。
摘要由CSDN通过智能技术生成

线性表就是具有相同数据类型的n(n>=0)个数据元素的有限序列。

关于线性表需要注意的有:数据元素同类型、有限个、有序、仅讨论元素间的逻辑关系。

typedef是计算机编程语言中用来为复杂的声明定义简单的别名。

线性表是逻辑结构,而线性表的存储实现包括顺序存储实现和链式存储实现。

顺序存储结构,就是用数组的方法实现。为什么说数组是顺序存储结构,因为数组是将元素在内存中连续存放,且每个元素占用内存相同。

关于数组操作的时间复杂度:查找:O(1);插入:O(n);删除:O(n)。

查找:由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素,所以与输入数据大小(n)无关,则其时间复杂度为O(1)。

插入:可以插入数组的位置有0(开头)、1、2、···、n、n+1(末尾),那么插入这些位置所需移动的次数为n、n-1、n-2、···、1、0,则平均移动次数为(0+1+···+n)/(n+1)=n*(n+1)/2(n+1)=n/2。时间复杂度O(n/2)即是O(n)。

删除:可以删除的数在数组中的位置有0(开头)、1、2、···、n-1、n(末尾),那么删除这些位置的数所需移动的次数为n-1、n-2、n-3、···、1、0,则平均移动次数为(0+1+···+n-1)/n=n*(n-1)/2n=(n-1)/2。时间复杂度O((n-1)/2)即是O(n)。

链式存储结构,就是用链表的方法实现。链表不要求逻辑上相邻的两个元素物理上也相邻,而是通过“链”的方法建立起元素之间的关系。链表的每一个节点包括数值和指针。

关于数组操作的时间复杂度:查找:O(n) 插入:O(1) 删除:O(1)。

查找:链表的“链”实际上就是一个指针,从上一个元素指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。所以,平均查找次数为(1+2+···+n)/n=n*(n+1)/2n=(n+1)/2,时间复杂度为O(n)。

插入:将一个数插入到链表的某一个位置,只需要将该位置的前一个节点(设为P)的指针指向需插入的节点(设为S),需插入的节点的指针指向原来该位置的节点。用代码表示为:

S->Next=P->Next;P->Next=S;(顺序不能反哦)

删除:删除链表上某个位置的节点,只需要将该节点的前一个节点(设为P)的指针指向该节点(设为S)的下一个节点。用代码表示为:

S=P->Next;P->Next=S->Next;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值