c++链表引入

文章讨论了数组和链表两种数据结构的特性。数组具有固定的大小和连续存储的数据,但查找、插入、删除操作效率较低。相比之下,链表在需要频繁进行插入、删除且数据不连续存放的场景下更具优势。以动物园动物排列问题为例,展示了使用链表能更高效地解决寻找右侧同类动物位置的问题,从而降低时间复杂度。
摘要由CSDN通过智能技术生成

引入链表

数组的特点:

1、有元素、下标概念。

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

2、大小固定,比如定义 int a[1000];

3、数据是连续存储的,比如通常 N=3,就是 a[0]a[1]a[2] 三个元素。

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

7

42

93

4、查找、插入、删除元素时间复杂度都是O(N)

5、存取第i个元素时间复杂度都是O(1)

有些任务,数据是不连续存放的;插入、删除操作多需要快速。因此产生了链表数据结构。比如:

【例1】下一个同类

动物园里有26种动物,分别用大写字母’A~Z’表示。这些N只动物从左到右排成一行,位置从0N-1。共有M个提问,每个提问是第i个位置上的动物想知道它的右边下一个同类的位置。如果它右边没有同类的动物了,就输出-1

输入格式

第一行:2个整数NM,范围在[1,1000000]

第二行:一个长度为N的大写字母字符串。

第三行:M个整数,范围在[0,N-1]

输出格式

一行,M个整数,输出相应问题的右边同类的位置,没有输出-1

输入样例

10 5

ABCADCBABC

0 2 4 5 6

输出样例

3 5 -1 9 8

【分析】

如果简单使用数组每个元素都查找一次右边的,显然时间复杂度为O(M*N)

如果链表数据结构,就可以快速知道答案。

例如下面是关于A的信息

可以对’B’’C’’D’等都做类似的处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子小院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值