資源描述:
《javascript數(shù)組實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的隊列與堆棧_javascript技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、JavaScript數(shù)組實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的隊歹(J與堆棧一、隊列和堆棧的簡單介紹1?1、隊列的基本概念隊列:是一種支持先進(jìn)先出(FIFO)的集合,即先被插入的數(shù)據(jù),先被取出!如下圖所示:舉一31a?an亠_隊頭隊尾隊列1.2、堆棧的基本概念堆棧:是一種支持后進(jìn)先出(LIFO)的集合,即后被插入的數(shù)據(jù),先被取出!如下圖所示:入棧二、在JavaScript中實現(xiàn)隊列和堆棧在JavaScript中實現(xiàn)隊列和數(shù)組主要是通過數(shù)組,js數(shù)組中提供了以下兒個方法可以訃我們很方便實現(xiàn)隊列和堆棧:?shift:從數(shù)組中把第一個元索刪除,并返回這個元索的值。?unshift:在數(shù)組的開頭
2、添加一個或更多元索,并返回新的長度?push:在數(shù)組的小末尾添加兀素,并返回新的長度?pop:從數(shù)組中把最后一個元素刪除,并返回這個元素的值。2.1、實現(xiàn)隊列〃創(chuàng)建一個數(shù)組來模擬隊列var3二newArray();console.log(a);//unshift:在數(shù)組的開頭添加一個或更多元索,并返回新的長度console.log(z,入隊〃);&imshift()console,log(a);//>a.unshift();console,log(a);//>,a.unshift();consolc.log
3、(a);//>,,&unshift();console.log(a);//>,,,console.1og(“出隊,先進(jìn)先出〃);console?log(a);//pop:從數(shù)組小把最后一個元素刪除,并返回這個元素的值3?pop();//>console.log(a);a.pop();//>console?log(a);&pop();//>console,log(a);a.pop0;//>console?1og(a);入隊[1][2,1]E2,1]【43,2,1]出臥>先進(jìn)先岀他3,2,1]33,2]心3]⑷2.2、實現(xiàn)堆棧4、text/javascript"〉〃創(chuàng)建一個數(shù)組來模擬堆棧vara=newArray();console,log(a);//push:在數(shù)組的末尾添加一個或更多元素,并返回新的長度console,log(〃入?!?;3.push()console.log(a);//>a.push();console,log(a);//>,a.push();consolc.log(3);//>,,a.push();console,log(a);//>,,,console.logCtB棧,后進(jìn)先出〃);console,log(a);//pop:從數(shù)組中把最后一個元素刪除,并返回這個元素
5、的值a.pop();//>console,log(a);a.popO;//>console,log(a);a.pop0;//>console.log(a);a.pop();//>console,log(a);[]入棧flja2ja2,3]m2.3,4]出棧,后進(jìn)先出m乙九4]m2.3][1.2][1][J2.3、push方法和unshift方法的性能測試Array的push與unshift方法都能給當(dāng)前數(shù)組添加元素,不同的是,push是在末尾添加,而unshift則是在開頭添加,從原理就口J以知道,unshift的效率是較低的。原因是,它每添加一個
6、元素,都耍把現(xiàn)有元素往下移一個位置。但到底效率差異冇多大呢?下而來簡單測試一下。/*關(guān)于代碼中"vars=+ncwDatc();〃的技巧說明解釋如下:二+這個運算符是不存在的;+相當(dāng)于.valueOf();+newDate()相當(dāng)于newDate().valueOf()//個結(jié)果一樣返回當(dāng)前時間的毫秒數(shù)alert(+newDatcO);alert(+newDate);vars=newDate();alert(s.valueOf());alert(s.getTime());*/vararr=[];varst
7、artTime=+newDate();//+newDate()相當(dāng)于newDate().valueOf(),返回當(dāng)前吋間的毫秒數(shù)//push性能測試for(vari=;i<;i++){arr?push(i);}varendTime二+newDate();console.log(,z調(diào)用push方法往數(shù)組中添加個元索耗時z,+(cndTimc-startTimc)+z,毫秒〃);startTime=+newDate();arr=[];//unshift性能測試for(vari=;i<;i++){arr.unshift(i);1jcndTimc=+ncvDate(