javascript数据结构

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博客,作为一个小菜鸟,技术不高,有什么问题希望大家指教,一起讨论 ,希望大家多多支持
下次我在更新一下其他的数据结构类型

.单链表(*)
.双链表
.栈
.队列
.集合
.哈希表
.树
.图
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值