摘要:列表的抽象數(shù)據(jù)類(lèi)型定義后續(xù)列表上傳代碼二棧是一種特殊的列表,棧內(nèi)的元素只能通過(guò)列表的一端訪問(wèn),這一端稱為棧頂。棧被稱為一種后入先出,的數(shù)據(jù)結(jié)構(gòu)。另一個(gè)常用的操作是預(yù)覽棧頂?shù)脑?。方法清除棧?nèi)所有元素,屬性記錄棧內(nèi)元素的個(gè)數(shù)。
一
列表是一組有序的數(shù)據(jù)。每個(gè)列表中的數(shù)據(jù)項(xiàng)稱為元素。在 JavaScript 中,列表中的元素 可以是任意數(shù)據(jù)類(lèi)型。列表中可以保存多少元素并沒(méi)有事先限定,實(shí)際使用時(shí)元素的數(shù)量 受到程序內(nèi)存的限制。
不包含任何元素的列表稱為空列表。列表中包含元素的個(gè)數(shù)稱為列表的 length。在內(nèi)部實(shí) 現(xiàn)上,用一個(gè)變量 listSize 保存列表中元素的個(gè)數(shù)??梢栽诹斜砟┪?append 一個(gè)元素, 也可以在一個(gè)給定元素后或列表的起始位置 insert 一個(gè)元素。使用 remove 方法從列表中 刪除元素,使用 clear 方法清空列表中所有的元素。
列表的抽象數(shù)據(jù)類(lèi)型定義(后續(xù)列表上傳)
代碼:
function List() { this.listSize = 0; this.pos = 0; this.dataStore = []; this.clear = clear; this.find = find; this.toString = toString; this.insert = insert; this.append = append; this.remove = remove; this.front = front; this.end = end; this.prev = prev; this.next = next; this.length = length; this.currPos = currPos; this.moveTo = moveTo; this.getElement = getElement; this.length = length; this.contains = contains; } function front() { this.pos = 0; } function end() { this.pos = this.listSize-1; } function prev() { if (this.pos > 0) { --this.pos; } } function next() { if (this.pos < this.listSize-1) { ++this.pos; } } function currPos() { return this.pos; } function moveTo(position) { this.pos = position; } function getElement() { return this.dataStore[this.pos]; }
二
棧是一種特殊的列表,棧內(nèi)的元素只能通過(guò)列表的一端訪問(wèn),這一端稱為棧頂。咖啡廳內(nèi) 的一摞盤(pán)子是現(xiàn)實(shí)世界中常見(jiàn)的棧的例子。只能從最上面取盤(pán)子,盤(pán)子洗凈后,也只能摞 在這一摞盤(pán)子的最上面。棧被稱為一種后入先出(LIFO,last-in-first-out)的數(shù)據(jù)結(jié)構(gòu)。
由于棧具有后入先出的特點(diǎn),所以任何不在棧頂?shù)脑囟紵o(wú)法訪問(wèn)。為了得到棧底的元 素,必須先拿掉上面的元素。
對(duì)棧的兩種主要操作是將一個(gè)元素壓入棧和將一個(gè)元素彈出棧。入棧使用 push() 方法,出 棧使用 pop() 方法。
另一個(gè)常用的操作是預(yù)覽棧頂?shù)脑?。pop() 方法雖然可以訪問(wèn)棧頂?shù)脑?,但是調(diào)用該方 法后,棧頂元素也從棧中被永久性地刪除了。peek() 方法則只返回棧頂元素,而不刪除它。
push()、pop() 和 peek() 是棧的 3 個(gè)主要方法,但是棧還有其他方法和屬性。clear() 方法 清除棧內(nèi)所有元素,length 屬性記錄棧內(nèi)元素的個(gè)數(shù)。我們還定義了一個(gè) empty 屬性,用 以表示棧內(nèi)是否含有元素,不過(guò)使用 length 屬性也可以達(dá)到同樣的目的。
代碼
function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.clear = clear; this.length = length; } function push(element) { this.dataStore[this.top++] = element; } function peek() { return this.dataStore[this.top-1]; } function pop() { return this.dataStore[--this.top]; } function clear() { this.top = 0; } function length() { return this.top; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84346.html
摘要:于是翻出了機(jī)房里的這本學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法開(kāi)始學(xué)習(xí)程序員的基礎(chǔ)知識(shí)。這本書(shū)用了我最熟悉的來(lái)實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)和算法,而且書(shū)很薄,可以說(shuō)是一本不錯(cuò)的入門(mén)教程。隊(duì)列在頭部刪除元素,尾部添加元素。 本系列所有文章:第一篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列第二篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之鏈表第三篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之集合第四篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之字典和散列表第五篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算...
摘要:原文地址學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)一棧和隊(duì)列博主博客地址的個(gè)人博客幾乎所有的編程語(yǔ)言都原生支持?jǐn)?shù)組類(lèi)型,因?yàn)閿?shù)組是最簡(jiǎn)單的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。他們就是棧和隊(duì)列。我們稱作棧頂,而另一端我們稱作棧底。移除棧頂?shù)脑兀瑫r(shí)返回被移除元素。 前言 只要你不計(jì)較得失,人生還有什么不能想法子克服的。 原文地址:學(xué)習(xí)javascript數(shù)據(jù)結(jié)構(gòu)(一)——棧和隊(duì)列 博主博客地址:Damonare的個(gè)人博客 幾乎所有的編程...
摘要:我們都知道數(shù)組是里面比較常用的一種數(shù)據(jù)結(jié)構(gòu),棧和數(shù)組類(lèi)似,定義如下棧是一種遵從后進(jìn)先出原則的有序集合。新增加和待刪除的元素都保存在棧的尾部,也稱棧頂,相反的另一端就叫棧底,在棧的這種數(shù)據(jù)結(jié)構(gòu)里面,我們新增的元素都在棧頂,舊的元素都在棧底。 由于不是計(jì)算機(jī)專業(yè)出身,對(duì)數(shù)據(jù)結(jié)構(gòu)這些了解的比較少,最近看了一些相關(guān)的書(shū)籍,這里做一些總結(jié)。本篇要說(shuō)的是棧。我們都知道數(shù)組是JavaScript里面...
摘要:三次握手所謂三次握手,是指簡(jiǎn)歷一個(gè)連接時(shí)需要客戶端和服務(wù)器總共發(fā)送三個(gè)包三次握手的目的是連接服務(wù)器指定端口,簡(jiǎn)歷連接,并同步連接雙方的序列號(hào)并交換窗口大小信息。 關(guān)于作者 昨天在思否上發(fā)了這篇整理,晚上10點(diǎn)多看到了很多贊收藏和關(guān)注,其實(shí)挺愧疚的,因?yàn)樽罱谡夜ぷ鬟@篇文章并沒(méi)有整理完??吹竭@個(gè)還挺受歡迎的,也因?yàn)樾鹿ぷ骰径ㄏ聛?lái)了,現(xiàn)在的公司正常交接中,打算下周末之前把這個(gè)知識(shí)梳理整理...
摘要:堆內(nèi)存主要作用是存放運(yùn)行時(shí)創(chuàng)建的對(duì)象。堆內(nèi)存用來(lái)存放由創(chuàng)建的對(duì)象和數(shù)組,在堆中分配的內(nèi)存,由虛擬機(jī)的自動(dòng)垃圾回收器來(lái)管理。這也是比較占內(nèi)存的原因,實(shí)際上,棧中的變量指向堆內(nèi)存中的變量,這就是中的指針 堆:(對(duì)象) 引用類(lèi)型的變量,其內(nèi)存分配在堆上或者常量池(字符串常量、基本數(shù)據(jù)類(lèi)型常量),需要通過(guò)new等方式來(lái)創(chuàng)建。 堆內(nèi)存主要作用是存放運(yùn)行時(shí)創(chuàng)建(new)的對(duì)象。(主要用于存放對(duì)象,...
閱讀 2692·2019-08-30 15:55
閱讀 1819·2019-08-30 15:53
閱讀 2670·2019-08-29 18:38
閱讀 939·2019-08-26 13:49
閱讀 511·2019-08-23 15:42
閱讀 3146·2019-08-22 16:33
閱讀 1014·2019-08-21 17:59
閱讀 1091·2019-08-21 17:11