javascript数据结构
**一,单链表**
( 我们首先要明白单链表的结构,链表中的每个节点都对应两个空间域,一个是
数据域(data),还有一个指向下一个节点的域(next) )
//首先定义一个函数来封装初始化链表
function linkedList(){
//我们需要两个标识符 head 和 length
this.head=null
this.length=0
//然后我们需要设置一个内部的类,来为每一个节点设置两个空间域
function Node(data){
/* 在这里我们需要传入一个参数data,因为节点
里的data值是我们要传入进去的,而只要传入进去
那么它就有值了*/
this.data=data
this.next=null
}
//接下来我们来加入方法
//1.插入节点
linkedList.prototype.insert=function(data,position){
//插入位置的判断
if(position<0 || position >this.length) return false
//接下来要判断,当前的链表是否为空
var newnode=new Node(data)
if(position === 0){
//如果插入的位置为第一个,
//那么刚好把头节点(this.head)等于这个新的节点
newnode.next=this.head
this.head=newnode
}else {
var prev=null
var current=this.head //来确定要插入的位置的标记
var index=0
while(index<position){
prev=current
current=current.next
index+=1
}
//等到代码执行到这里的时候,我们分两种情况
//1.插入的不是最后一个的情况
//2.插入的位置是最后一个位置
//如果是前者的话,current指向的是当前要插入的位置
//prev指向的是current前边的一个节点,使用下边的代码
newnode.next=current
prev.next=newnode
/*如果是后者的话,也就是说position===this.length
index===position,此时的prev指向的是表里边
最后一个节点,而current此时是空的(因为最后一个节点的next==null)
插入到最后一个位置,那么这个newnode的next是为空的
那么上边的代码也刚好能解决这种情况,所以不用再写
*/
}
this.length+=1
return true
}
//2.删除方法
linkedList.prototype.remove=function(position){
if(position<0 || position>this.length-1) return false
//如果是首位值得话
if(position===0){
this.head=this.head.next
}else {
var current=this.head
var index=0
var prev=null
while(index<position){
prev=current
current=current.next
index+=1
}
}
/*到这里的话,就已经找到要删除的位置了,prev指向要删除的节点的前一个
,current指向当前要删除的节点*/
prev.next=current.next
this.length-=1
return false
}
//3.查找某个位置上的节点值是多少
linkedList.prototype.getElement=function(position){
if(position<0 || position>this.length-1) return false
var index=0
var current=this.head
while(index<position){
index+=1
current=current.next
}
return current.data
}
/*4......输入一个数据查找在什么位置 即找到他们的索引·没找到返回-1*/
linkedList.prototype.indexOf=function(data){
var current=this.head
var index=0 //来记录最终得到的下标
while(current){
//从头节点开始查找,如果找到就返回index
if(current.data===data){
return index
}
current=current.next
index+=1
}
//如果代码到了这里就说明没找到,没返回index,那么就返回-1
return -1
}
/*5. 输入一个值,如果不存在该值,返回false 否则删除掉他 */
linkedList.prototype.seeDelete=function(value){
var position=this.indexOf(value)//调用前边的方法
if(position!=-1){
this.remove(position)
}else{
return false
}
}
}
我们现在来测试一下这个insert方法
/* 这个现在在整个linkedListed函数外边,通过实例来构造函数 */
var linked=new linkedList()
linked.insert(0,0)
linked.insert(1,1)
linked.insert(2,2)
console.log(linked)
结果如下
本人第一次写csdn博客,作为一个小菜鸟,技术不高,有什么问题希望大家指教,一起讨论 ,希望大家多多支持
下次我在更新一下其他的数据结构类型
.单链表(*)
.双链表
.栈
.队列
.集合
.哈希表
.树
.图