数组和链表

数据结构与算法 之 一维数据结构



一、数据结构与算法有什么关系?

数据结构:可以容纳数据的结构被称为数据结构。
算法:用来对数据结构进行处理的方法被称为算法。
我们可以认为,数据结构是静态的,算法是动态的。

二、一维数据结构(线性数据结构)

一维数据结构主要有数据和链表。主要强调存储与顺序。

1.数组

数组:在这里插入图片描述
数组的特性:

  • 在物理空间上的存储是连续的。
  • 底层的数组长度是不可变的。
  • 数组的变量,指向了数组第一个元素的位置。

数组的优点:

  • 查询性能好, 需要随机的读取元素时,数组的效率很高,因为可以迅速找到数组的任何元素。
    在操作系统中,通过偏移查询数据的性能最好

数组的缺点:

  • 因为空间必须是连续的,所以如果数组比较大且系统的空间碎片比较多的情况下,容易存不下。
  • 因为数组的长度是固定的,所以数组内容难以被添加和删除(如果想添加数组元素,需要开辟新的内存空间)

创建数组:

const arr = new Array(5).fill(0)
// [0,0,0,0,0]
const nums = [1,2,3,4,5];
// [1,2,3,4,5]

2.链表

链表:链式存储结构,链表中的元素可以存储在内存的任何地方,链表中的每个元素都存储了下一个元素的地址,从而使一些列随机的内存地址串在一起。
在这里插入图片描述
链表的特性:

  • 在空间上是不连续的。
  • 每存放一个值,都需要多开销一个引用空间。

优点:

  • 不需要连续的内存空间,只要内存足够大,不需要担心存不下的情况。
  • 链表的添加和删除非常容易:只需将其放入内存,并将其地址存放到前一个元素中即可。

缺点:

  • 查询速度很慢,需要从根节点开始挨个向后查询。
  • 链表的每一个节点都需要创建一个指向next的引用,浪费一些空间。

创建链表:

function Node(value){
	this.value = value;
	this.next = null;
}
const a = new Node('a');
const b = new Node('b');
const c = new Node('c');

a.next = b;
b.next = c;

循环链表:

function loop(root){
	const temp = root;
	while(temp){
		console.log(temp.value);
		temp = temp.next;
	}
}

总结

链表和数组各有其优势和适用场景。链表适合频繁插入和删除的操作、动态分配内存和按顺序查找的数据的情况;而数组适合静态数据结构,数据密集和需要快速查找数据的情况。在选择时应该根据具体的应用场景和需求来权衡合适的数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值