一看就懵最不详细的数据结构与算法教程 线性表

本文介绍了线性表的不同存储方式,包括数组、链表、二维数组(矩阵)、稀疏矩阵、栈和队列。阐述了它们的数据结构、时间复杂度,并给出了C#、C++、JS等语言的实现示例,如数组插入删除时间复杂度为O(n),链表删除、插入、查找时间复杂度为O(n)等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

word文档:https://github.com/IceEmblem/-/tree/master/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/%E5%B9%B3%E5%8F%B0%E6%97%A0%E5%85%B3/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/%E5%9F%BA%E6%9C%AC%E6%95%99%E7%A8%8B

参考文档:https://blog.youkuaiyun.com/ityqing/article/details/82838524

 

线性表的数据属于1对1关系

线性表中的数据是线性排列的,每个数据存在一个前驱和后驱数据(首尾除外),数据连起来就像一条线,称为线性表,如下是线性表的不同存储方式

 

数组

数据结构

数组是最简单的线性表了,其数据结构如下

数组数据的位置与物理存储位置相同

 

时间复杂度

试想,当我们在第1个位置插入数据时,我们需要将原先的1到n个数据往后移一位,当我们删除第1个数据是,将2到n个数据往前移一位,数据量n和移动时间t成正比,所以

插入删除时间复杂度为O(n)

同理

通过比较查找数据时间复杂度为O(n)

通过索引查找数据时间复杂度为O(1)

 

各个语言的实现

大多数语言不支持数组的插入和删除操作,因为这需要重新申请内存

C#:datatype[] arrayName;

C++:string list[] = {"ABC", "DEF"};

JS:

注:不要问我为什么没有java,因为我不会

 

 

链表

数据结构

链表的每一个数据都有一个指针next,指向下一个数据

 

时间复杂度

如果要删除第i个数据,我们需要从第一个位置开始,一直next i次才能找到该位置,同理其他,所以

删除,插入,查找的时间复杂度为O(n)

 

各个语言的实现

C#:List

C++:Vector

Js:[]

 

 

二维数组(矩阵)

数据结构

二维数组是一个m行n列的数据结构通过 list[i][j] 来索引数据,矩阵一般使用二维数组存储

 

时间复杂度

二维数组元素的修改和查找一般都是根据索引进行

根据索引修改、查找元素为O(1)

 

各个语言实现

C#:int[,] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

C++:int a1[2][3] = {1,2,3,4,5,6};

Js:var a = [[1,2,3],[2,3,4]]

 

 

稀疏矩阵

矩阵中多数元素为0,称为稀疏矩阵

数据结构

稀疏矩阵就是矩阵,由于矩阵中多数元素都是0,所以稀疏矩阵一般使用3元组表示矩阵的元素,3元组的数组代表矩阵,如3元组 (1, 3, 10) 代表第1行,第3列的元素值为10,如 [(1, 3, 10), (1, 10, 2), (2, 4, 8), (2, 9, 7), (3, 5, 6)] 代表一个稀疏矩阵

 

各个语言的实现

想啥呢,没有对应实现,要实现只能自己实现

 

 

栈只能在数据的尾部进行插入和删除操作

数据结构

如上,我们只能在栈顶插入数据(入栈)或者移除数据(出栈)

 

各个语言的实现

C#:Stack

C++:stack

Js:[],不要怀疑,js的数组实现了栈的操作

 

 

队列

队列是种先进先出的线性表

数据结构

我们只能在尾端插入数据,在头部移除数据,这样的数据结构称为队列

 

各个语言的实现

C#:Queue

C++:queue

Js:你可以使用数组实现队列,因为数组也提供了对应的队列方法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值