(2021.9.16)针对数组和链表的时间复杂度详解

本文探讨数组和链表两种数据结构,详细解释它们的定义、数据结构及时间复杂度。数组通过下标寻址,时间复杂度在增删查中各异,尾部插入为O(1),中间插入为O(n),查找平均为O(logN)。链表随机存储,查询通常为O(N),插入和删除操作通常为O(1)。理解这些特性有助于优化算法性能。

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

由于工作原因,很久没有写一些学习的博客了。

最近抽空在看数据结构和时间复杂度的文章,今天想谈一下数组和链表相关的问题。

目录

1. 数组

1.1 什么是数组

1.2 数据结构

1.2.1 一维数组

1.3 为什么数组下标是从0开始

1.4 时间复杂度

1.4.1 新增

1.4.2 删除

1.4.3 查找

2. 链表

2.1 什么是链表

2.2 数据结构

2.2.1 单向链表

2.2.2 双向链表

2.3 时间复杂度

2.3.1 查询

2.3.2 插入

2.3.3 删除


1. 数组

1.1 什么是数组

数组就是由相同类型的元素集合组成的固定长度的一种数据结构。在内存中开辟的空间是顺序存储的,因此可以通过下标index计算出某个元素的地址。

需要提前预约空间。

1.2 数据结构

1.2.1 一维数组

int[] arr = {1,2,3,4};

如上图所示,如果我们编写上述代码。那么可视为栈中会出现这一个数据结构。

或者我们这样:

int[] arr = new int[4];

arr[0] = 1;

arr[1] = 2;

arr[2] = 3;

arr[3] = 4;

由于我们使用了new关键字,所以会在堆中开辟空间

1.2.2 多维数组

int[][] arr = {
  {1,2,3},{4,5,6},{7,8,9}};

1.3 为什么数组下标是从0开始

在我们编程的过程中,可能会很多次用到arr[0],这样的操作。大家有没有想过,为啥下标index是从0开始呢?  

数组的寻址公式:

arr[N] = base_address+N*data_type_size;

base_address:基础地址;

data_type_size:每个数组中元素的大小;比如说int类型,那就是4

比如说:我们当前数组的基础地址是从1000开始,base_address=1000,如果我们想得到数组的第一个地址。那么根据公式:arr[0] = base_address+0*data_type_size=base_address=1000,刚好就在我们开始的位置。

但是如果我们下标从1开始计算,那么如果我想得到第一个数据的地址,根据公式,我们应该进行这样的运算:arr[i] = base_address+(i-1)*data_type_size;此时i>0

有人可能会说了,不就多了个1-1嘛。算出来还不是一样的值。有啥影响呢? 

但事实上没那么简单~    对于我们来说,这种计算可能没有任何影响。但是对于cpu来说,相当于至少多了一条减法指令。有的同学应该看过字节码文件编译之后得到的汇编语言,如下图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值