数据结构与算法之美专栏笔记_数组链表栈篇

本文深入探讨数组、链表和栈这三种基本数据结构,分析它们的特性、优缺点以及在实际操作中的性能表现。数组支持随机访问但插入删除效率低,链表灵活但查找慢,栈则是后进先出的典型应用。通过实例和面试题集锦,帮助读者理解并掌握这些核心概念。
摘要由CSDN通过智能技术生成


摘要


在具体的算法题解之前,我会先简要的描述一些知识点,这些知识点都是基于数据结构与算法专栏的总结,对于详细的推理不再涉及,仅当做笔记使用。

我们所熟识的数组

1.1 从一个问题开始

为什么大部分编程语言中,数组要从0开始编号,而不是从1开始?

从数组存储的内存模型来看,数组的下标实际上指的是内存地址的偏移,假设用a表示数组的首地址,将数组元素的类型所占字节数计为type_size,那么a[k]表示的含义就是存储在内存空间k*typesize+base_addr处的元素,如果从1开始编号的,公式就变成了这样——
( k − 1 ) ∗ t y p e s i z e + b a s e a d d r (k-1)*typesize+base_addr (k1)typesize+baseaddr
也就是说,每次随机访问数组元素时多了一个减法操作,CPU多了一次减法指令的执行。

1.2 数组概述

数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据

数组的特性之一就是数组支持随机访问,根据下标随机访问的时间复杂度是O(1).而不基于下标访问数组元素最优的方式是二分查找,平均时间复杂度为O(logn).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值