当前位置:   article > 正文

(2021.9.16)针对数组和链表的时间复杂度详解_数组和链表数据结构描述,各自的时间复杂度

数组和链表数据结构描述,各自的时间复杂度

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

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

目录

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};

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

或者我们这样:

  1. int[] arr = new int[4];
  2. arr[0] = 1;
  3. arr[1] = 2;
  4. arr[2] = 3;
  5. arr[3] = 4;

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

1.2.2 多维数组

  1. int[][] arr = {
  2. {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来说,相当于至少多了一条减法指令。有的同学应该看过字节码文件编译之后得到的汇编语言,如下图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/900624
推荐阅读
相关标签
  

闽ICP备14008679号