前言:为什么要学数据结构,它对我们有什么帮助?它能解决什么问题?主页的数据结构不是特定的编程语言。它教给我们的是一种思维方式,即如何更好地存储数据,解决一些问题。通过学习数据结构,我们可以大大拓宽我们的思路。掌握了数据结构和算法之后,看问题的深度和解决问题的角度就会有很大的不同。对于个人逻辑思维的提升也是质的飞跃。下面我们从以下几点来一一了解它们的原理和实现场景:什么是栈,什么是队列,什么是链表,什么是集合,什么是字典,什么是二叉树,什么是一个链表存储多个元素,数组或列表可能是最常用的,但是这种数据结构有一个缺点:数组的大小是固定的,移动和插入元素的成本非常高;不是连续的,每个元素都是从元素自己的节点到下一个元素的引用。如下图所示:如何实现一个链表创建一个LinkedList类骨架创建一个连接链表数据结构的Node类丰富链表的数据方法创建一个LinkedList类初始三个值:count:代表个数ofelementsinthelinkedlisthead:表示链表数据结构equalsFn:用一个内部函数表示链表中元素是否相等constdefaultEquals=(a,b)=>a===bclassLinkedList{constructor(equalsFn=defaultEquals){this.count=0;//this.head=undefinedthis.equalsFn=equalsFn}}创建一个Node类初始两个值:element:表示加入链表的元素的值next:表示指向下一个链表的指针classNode{constructor(element){this.element=elementthis.next=undefined}}丰富链表的方法push(element):在链表尾部添加一个新元素。insert(element,position):向链表中的特定位置插入一个新元素。getElementAt(index):返回链表中特定位置的元素。如果链表中不存在这样的元素,则返回undefineddremove(element):从链表中移除一个元素。indexOf(element):返回元素在链表中的索引。如果链表中没有元素,则返回-1removeAt(position):从链表中的特定位置移除一个元素。isEmpty():如果链表不包含任何元素,则返回true,如果链表长度大于0,则返回false。size():返回链表包含的元素个数,类似于的length属性阵列。类LinkedList{构造函数(equalsFn=defaultEquals){this.count=0;this.head=undefinedthis.equalsFn=equalsFn}push(element){constnode=newNode(element)letcurrent;//是否第一次进入Emptyif(this.head==null){this.head=node}else{//记录当前引用关系current=this.head;while(current.next!=null){current=current.next;}//给新元素赋next,建立链接current.next=node}//每次更新链表长度this.count++}//返回链表中特定位置的元素getElementAt(index){if(index>0&&index<=this.count){letnode=this.head;让j=0;while(j
