算法 —— 2.线性数据结构(一维)

线性数据结构:线性数据结构强调的是存储与顺序。

一、数组(空间角度,必须连续)

                数组定长:数组改变长度时,js会自动扩容(但是会消耗性能),所以建议创建数组时                                      预估数组长度,避免扩容带来的性能消耗。

                数组特性:1.存储在物理空间上是连续的。

                                  2.底层的数组长度是不可变的。

                                  3.数组的变量,指向数组第一个元素的位置。

let a = [1,2,3,4,5,6];
a[1] //[1]:表示存储地址的偏移。

                数组优点:1.查询性能好。(指定查询某个位置)

                数组的缺点:1.因为空间必须是连续的。当系统的空间碎片较多且数组比较大时,

                                         容易存不下。

                                      2.因为数组的长度是固定的,所以数组的内容难以被添加和删除。

let arr = [1,2,3,4,5,6];(内容固定时可有使用)
//或
let arr = new Array(10);(内容不固定时使用)(推荐)    //10为初始化长度

二、链表(空间角度,可以不连续)

               链表:带有封装形式的数据结构。

let b = {
    value:2,
    next:null
},

let a = {
    value:1,
    next:b    //指向b(地址)
}

console.log(a.next === b)    //true

               链表特点:

                                1.在空间上不是连续的。

                                2.每存放一个值,都要多开销一个引用空间。

                链表优点:

                                1.只要内存足够大,就能存得下,不用担心空间碎片的问题。

                                2.链表的添加和删除非常的方便。(改变两个引用即可)。

                链表缺点:

                                1.查询速度慢。(查寻指定位置时,要按照链表结构,从根节点依次查询)

             (可避免) 2.链表每一个节点都需要创建一个指向next的引用,浪费空间。

                如何避免链表缺点2:当节点内数据越多的时候,这部分多开销的内存影响越小。

                重要:传递链表,必须传递链表的根节点(每一个节点,都认为自己是根节点),因为                             链表的指向是单向的(每一个节点:只能找到下家,找不到上家)。

                删除节点:改变上个节点的指向即可。(被删除的节点客观存在,但与链表无关)

                如何创建列表:

//1.定义链表结构

function Node(value){    //定义的节点
    this.value = value;
    this.next = null;
}

let a = new Node(1);
let b = new Node(2);
let c = new Node(3);
let d = new Node(4);

a.next = b;
b.next = c;
c.next = d;
c.next = null;

console.log(a.value);                    //1
console.log(a.next.value);               //2
console.log(a.next.next.value);          //3
console.log(a.next.next.next.value);     //4

                注:一直next也不是办法,此时就需要借助算法来解决这一问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值