摘要:列表的抽象數據類型定義后續列表上傳代碼二棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。棧被稱為一種后入先出,的數據結構。另一個常用的操作是預覽棧頂的元素。方法清除棧內所有元素,屬性記錄棧內元素的個數。
一
列表是一組有序的數據。每個列表中的數據項稱為元素。在 JavaScript 中,列表中的元素 可以是任意數據類型。列表中可以保存多少元素并沒有事先限定,實際使用時元素的數量 受到程序內存的限制。
不包含任何元素的列表稱為空列表。列表中包含元素的個數稱為列表的 length。在內部實 現上,用一個變量 listSize 保存列表中元素的個數。可以在列表末尾 append 一個元素, 也可以在一個給定元素后或列表的起始位置 insert 一個元素。使用 remove 方法從列表中 刪除元素,使用 clear 方法清空列表中所有的元素。
列表的抽象數據類型定義(后續列表上傳)
代碼:
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]; }
二
棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。咖啡廳內 的一摞盤子是現實世界中常見的棧的例子。只能從最上面取盤子,盤子洗凈后,也只能摞 在這一摞盤子的最上面。棧被稱為一種后入先出(LIFO,last-in-first-out)的數據結構。
由于棧具有后入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元 素,必須先拿掉上面的元素。
對棧的兩種主要操作是將一個元素壓入棧和將一個元素彈出棧。入棧使用 push() 方法,出 棧使用 pop() 方法。
另一個常用的操作是預覽棧頂的元素。pop() 方法雖然可以訪問棧頂的元素,但是調用該方 法后,棧頂元素也從棧中被永久性地刪除了。peek() 方法則只返回棧頂元素,而不刪除它。
push()、pop() 和 peek() 是棧的 3 個主要方法,但是棧還有其他方法和屬性。clear() 方法 清除棧內所有元素,length 屬性記錄棧內元素的個數。我們還定義了一個 empty 屬性,用 以表示棧內是否含有元素,不過使用 length 屬性也可以達到同樣的目的。
代碼
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; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84346.html
摘要:于是翻出了機房里的這本學習數據結構與算法開始學習程序員的基礎知識。這本書用了我最熟悉的來實現各種數據結構和算法,而且書很薄,可以說是一本不錯的入門教程。隊列在頭部刪除元素,尾部添加元素。 本系列所有文章:第一篇文章:學習數據結構與算法之棧與隊列第二篇文章:學習數據結構與算法之鏈表第三篇文章:學習數據結構與算法之集合第四篇文章:學習數據結構與算法之字典和散列表第五篇文章:學習數據結構與算...
摘要:原文地址學習數據結構一棧和隊列博主博客地址的個人博客幾乎所有的編程語言都原生支持數組類型,因為數組是最簡單的內存數據結構。他們就是棧和隊列。我們稱作棧頂,而另一端我們稱作棧底。移除棧頂的元素,同時返回被移除元素。 前言 只要你不計較得失,人生還有什么不能想法子克服的。 原文地址:學習javascript數據結構(一)——棧和隊列 博主博客地址:Damonare的個人博客 幾乎所有的編程...
摘要:我們都知道數組是里面比較常用的一種數據結構,棧和數組類似,定義如下棧是一種遵從后進先出原則的有序集合。新增加和待刪除的元素都保存在棧的尾部,也稱棧頂,相反的另一端就叫棧底,在棧的這種數據結構里面,我們新增的元素都在棧頂,舊的元素都在棧底。 由于不是計算機專業出身,對數據結構這些了解的比較少,最近看了一些相關的書籍,這里做一些總結。本篇要說的是棧。我們都知道數組是JavaScript里面...
摘要:三次握手所謂三次握手,是指簡歷一個連接時需要客戶端和服務器總共發送三個包三次握手的目的是連接服務器指定端口,簡歷連接,并同步連接雙方的序列號并交換窗口大小信息。 關于作者 昨天在思否上發了這篇整理,晚上10點多看到了很多贊收藏和關注,其實挺愧疚的,因為最近在找工作這篇文章并沒有整理完。看到這個還挺受歡迎的,也因為新工作基本定下來了,現在的公司正常交接中,打算下周末之前把這個知識梳理整理...
摘要:堆內存主要作用是存放運行時創建的對象。堆內存用來存放由創建的對象和數組,在堆中分配的內存,由虛擬機的自動垃圾回收器來管理。這也是比較占內存的原因,實際上,棧中的變量指向堆內存中的變量,這就是中的指針 堆:(對象) 引用類型的變量,其內存分配在堆上或者常量池(字符串常量、基本數據類型常量),需要通過new等方式來創建。 堆內存主要作用是存放運行時創建(new)的對象。(主要用于存放對象,...
閱讀 2672·2019-08-30 15:55
閱讀 1804·2019-08-30 15:53
閱讀 2656·2019-08-29 18:38
閱讀 928·2019-08-26 13:49
閱讀 502·2019-08-23 15:42
閱讀 3114·2019-08-22 16:33
閱讀 1004·2019-08-21 17:59
閱讀 1082·2019-08-21 17:11