最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript封裝單向鏈表的示例代碼

 更新時(shí)間:2020年09月17日 11:43:33   作者:TanJia  
這篇文章主要介紹了JavaScript如何封裝單向鏈表,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下

使用JavaScript封裝單向鏈表:

1. 封裝LinkList的類,用于表示我們的鏈表結(jié)構(gòu)。

2. 在LinkList類中有一個(gè)Node類,用于封裝每一個(gè)節(jié)點(diǎn)上的信息(data與next)。

3. 在鏈表中保存兩個(gè)屬性,一個(gè)是鏈表的長度,一個(gè)是鏈表中的第一個(gè)節(jié)點(diǎn)。

4.封裝一些鏈表的常用方法:

  • append(element):想列表尾部添加一個(gè)新的項(xiàng);
  • insert(position,element):向列表的特定位置插入一個(gè)新的項(xiàng);
  • get(position):獲取對(duì)應(yīng)位置的元素;
  • indexOf(element):返回元素在鏈表中的索引,如果鏈表中沒有該元素則返回-1;
  • update(position,element):修改某個(gè)位置的元素;
  • removeAt(postion):從列表的特定位置移除一項(xiàng);
  • remove(element):從列表中移除一項(xiàng);
  • isEmpty():如果鏈表中不包含任何元素,返回true,否則返回false;
  • size():返回鏈表中包含元素的個(gè)數(shù);
  • toString():輸出鏈表元素的值;
<script type="text/javascript">
	function LinkList(){
		/* 節(jié)點(diǎn)類 */
		function Node(data){
			this.data = data
			this.next = null
		}
		
		this.head = null
		this.length = 0
		/* 追加方法 */
		LinkList.prototype.append = function(data){
			/* 創(chuàng)建新節(jié)點(diǎn) */
			var newNode = new Node(data)
			if(this.length === 0){
				this.head = newNode
			}else{
				/* 找到最后一個(gè)節(jié)點(diǎn) */
				var current = this.head
				while(current.next){
					current = current.next
				}
				current.next = newNode
			}
			this.length += 1
		}

		/* toString方法 */
		LinkList.prototype.toString = function(){
			var current = this.head
			var listString = ""
			
			while(current){
				listString += current.data +" "
				current = current.next
			}
			return listString
		}

		/* insert方法 */
		LinkList.prototype.insert = function(position,data){
			/* 對(duì)position進(jìn)行越界判斷 */
			if(position<0||position>this.length) return false
			var node = new Node(data)
			if(position == 0){
				node.next = this.head
				this.head = node
			}else{
				var index = 0
				var current = this.head
				var previous = null
				while(index++ < position){
					previous = current
					current = current.next
				}
				node.next = current
				previous.next = node
			}
			this.length += 1
			return true
		}
		
		/* get方法 */
		LinkList.prototype.get = function(position){
			/* 越界判斷 */
			if(position<0 || position >= this.length) return null
			
			var current = this.head
			var index = 0
			while(index++ < position){
				current = current.next
			}
			return current.data
		}

		/* indexOf方法 */
		LinkList.prototype.indexOf = function(data){
			/* 定義變量 */
			var current = this.head
			var index = 0
			/* 開始查找 */
			while(current){
				if(current.data === data){
					return index
				}else{
					current = current.next
					index += 1
				}
			}
			return -1
		}

		/* update方法 */
		LinkList.prototype.update = function(position,data){
			/* 越界判斷 */
			if(position<0 || position >= this.length) return false
			
			var current = this.head
			var index = 0
			while(index++ < position){
				current = current.next
			}
			/* 修改data */
			current.data = data
			return true
		}

		/* removeAt方法 */
		LinkList.prototype.removeAt = function(position){
			/* 越界判斷 */
			if(position<0 || position >= this.length) return null
			var current = this.head
			if(position === 0){
				this.head = this.head.next
			}else{
				var index = 0
				var previous = null
				while(index++ < position){
					previous = current
					current = current.next
				}
				previous.next = current.next
			}
			this.length -= 1
			return current.data
		}
		
		/* remove */
		LinkList.prototype.remove = function(data){
			/* 根據(jù)data找位置 */
			var position = this.indexOf(data)
			return this.removeAt(position)
		}
		
		LinkList.prototype.isEmpty = function(){
			return this.length === 0
		}
		
		LinkList.prototype.size = function(){
			return this.length
		}
		
	}
	
	
	/* 測(cè)試 */
	var list = new LinkList()
	list.append('a')
	list.append('b')
	list.append('c')
	console.log(list.toString()) /* a b c */
	
	list.insert(3,'d')
	console.log(list.toString())/* a b c d */
	
	console.log(list.get(2)) /* c */
	console.log(list.indexOf('d')) /* 3 */
	
	list.update(1,'bbb')
	console.log(list.toString()) /* a bbb c d */
	
	console.log(list.removeAt(2)) /* c */
	console.log(list.toString())/* a bbb d */
	
	console.log(list.remove('a'))
	console.log(list.toString())/* bbb d */
	
	console.log(list.isEmpty()) /* false */
	
	console.log(list.size()) /* 2 */
</script>

以上就是JavaScript封裝單向鏈表的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于JavaScript封裝單向鏈表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用js實(shí)現(xiàn)簡單算法的實(shí)例代碼

    用js實(shí)現(xiàn)簡單算法的實(shí)例代碼

    下面小編就為大家?guī)硪黄胘s實(shí)現(xiàn)簡單算法的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • js原生輪播圖插件制作

    js原生輪播圖插件制作

    這篇文章主要為大家詳細(xì)介紹了js原生輪播圖插件制作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • js判斷是否為ie的方法小結(jié)

    js判斷是否為ie的方法小結(jié)

    這篇文章主要介紹了js判斷是否為ie的方法,有需要的朋友可以參考一下
    2014-01-01
  • js對(duì)數(shù)字的格式化使用說明

    js對(duì)數(shù)字的格式化使用說明

    Javascript也提供了對(duì)數(shù)字進(jìn)行格式化輸出的支持,需要的朋友可以參考下。
    2011-01-01
  • javascript+xml技術(shù)實(shí)現(xiàn)分頁瀏覽

    javascript+xml技術(shù)實(shí)現(xiàn)分頁瀏覽

    基于web的技術(shù)中,分頁是一個(gè)老的不能再老的,但大家津津樂道的問題,隨著xml技術(shù)的日漸應(yīng)用,把xml應(yīng)用到分頁當(dāng)中,也是一種可能,當(dāng)然網(wǎng)上的教程很多,當(dāng)我都是看得稀里糊涂,索性自己寫一個(gè),與大家分享、指正。
    2008-07-07
  • Bootstrap每天必學(xué)之導(dǎo)航

    Bootstrap每天必學(xué)之導(dǎo)航

    Bootstrap每天必學(xué)之導(dǎo)航,本文講解的就是大家在做項(xiàng)目時(shí)一定會(huì)接觸到的導(dǎo)航,感興趣的小伙伴們可以參考一下
    2015-11-11
  • JavaScript 閉包在封裝函數(shù)時(shí)的簡單分析

    JavaScript 閉包在封裝函數(shù)時(shí)的簡單分析

    近才開始系統(tǒng)的研究js,對(duì)js的興趣源于對(duì)JQuery的應(yīng)用。之前只會(huì)用js做簡單的計(jì)算函數(shù),后來由于需要做特效,故接觸JQ,看著API,基本的特效都能完成,但相反,如果用js去實(shí)現(xiàn),估計(jì)自己很難寫得出來,所以下定決心系統(tǒng)的看看js。
    2009-11-11
  • javascript原型鏈繼承用法實(shí)例分析

    javascript原型鏈繼承用法實(shí)例分析

    這篇文章主要介紹了javascript原型鏈繼承用法,實(shí)例分析了javascript原型鏈繼承中的技巧與相關(guān)注意事項(xiàng),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • Fundebug支持監(jiān)控微信小程序HTTP請(qǐng)求錯(cuò)誤的方法

    Fundebug支持監(jiān)控微信小程序HTTP請(qǐng)求錯(cuò)誤的方法

    這篇文章主要介紹了Fundebug支持監(jiān)控微信小程序HTTP請(qǐng)求錯(cuò)誤的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • 再談javascript注入 黑客必備!

    再談javascript注入 黑客必備!

    這篇文章主要為大家詳細(xì)介紹了js注入,黑客之路必備!本文告訴大家js注入是什么,js注入攻防如何進(jìn)行,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評(píng)論

水城县| 固始县| 涿鹿县| 济阳县| 鲜城| 盐边县| 鱼台县| 慈利县| 得荣县| 万年县| 怀集县| 太谷县| 阜阳市| 宜宾县| 石河子市| 台北市| 颍上县| 田东县| 屏东市| 竹溪县| 九龙坡区| 库车县| 山阳县| 庆云县| 梓潼县| 西峡县| 阳山县| 高陵县| 大宁县| 海林市| 金湖县| 夏邑县| 平遥县| 凭祥市| 元氏县| 铜川市| 沁阳市| 房山区| 卓尼县| 襄城县| 河西区|