您好,登錄后才能下訂單哦!
這篇文章主要講解了“javascript有沒有數據結構”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“javascript有沒有數據結構”吧!
javascript中有數據結構,數據結構是指相互之間存在一種或者多種特定關系的數據元素集合;數據結構能夠有效的管理數據對象,提升運算性能,JavaScript中的數據結構有列表、棧、隊列、鏈表、字典、散列、圖和二叉查找樹。
本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
javascript有數據結構
數據結構:列表、棧、隊列、鏈表、字典、散列、圖和二叉查找樹
列表
在日常生活中,人們經常使用列表:待辦事項列表、購物清單、最佳十名榜單等等。而計算機程序也在使用列表,在下面的條件下,選擇列表作為數據結構就顯得尤為有用:
數據結構較為簡單
不需要在一個長序列中查找元素,或者對其進行排序
反之,如果數據結構非常復雜,列表的作用就沒有那么大了。
棧
棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。想象一下,我們平常在飯館見到的一摞盤子就是現實世界常見的棧的例子,只能從最上面取盤子,盤子洗干凈后,也只能放在最上面。棧被稱為一種后入先出的數據結構。是一種高效的數據結構,因為數據只能在棧頂添加或刪除,所以這樣的操作很快。
使用條件:
只要數據的保存滿足后入先出或先進后出的原理,都優先考慮使用棧
隊列
隊列也是一種列表,不同的是隊列只能在隊尾插入元素,在隊首刪除元素。想象一下,我們在銀行排隊,排在最前面的人第一個辦理業務,而后面來的人只能排在隊伍的后面,直到輪到他們為止。
使用條件:
只要數據的保存滿足先進先出、后入后出的原理,都優先考慮使用隊列
常見應用場景:
隊列主要用在和時間有關的地方,特別是操作系統中,隊列是實現多任務的重要機制
消息機制可以通過隊列來實現,進程調度也是使用隊列來實現
鏈表
鏈表也是一種列表,為什么需要出現鏈表,JavaScript中數組的主要問題時,它們被實現成了對象,與其他語言(比如C++和Java)的數組相對,效率很低。如果你發現數組在實際使用時很慢,就可以考慮使用鏈表來代替它。
使用條件:
鏈表幾乎可以用在任何可以使用一維數組的情況中。如果需要隨機訪問,數組仍然是更好的選擇。
字典
字典是一種以鍵-值對行駛存儲數據的數據結構,JavaScript中的Object類就是以字典的形式設計的。JavaScript可以通過實現字典類,讓這種字典類型的對象使用起來更加簡單,字典可以實現對象擁有的常見功能,并相應拓展自己想要的功能,而對象在JavaScript編寫中隨處可見,所以字典的作用也異常明顯了。
散列
散列(也稱為哈希表)是一種的常用的數組存儲技術,散列后的數組可以快速地插入或取用。散列使用的數據結構叫做散列表。在散列表上插入、刪除和取用數據都非常快,但對于查找操作來說卻效率低下,比如查找一組數組中的最大值和最小值。這些操作需要求助于其他數據結構,比如下面介紹的二叉查找樹。
散列表在JavaScript中可以基礎數組去進行設計。數組的長度是預先設定的,所有元素根據和該元素對應的鍵,保存在數組的特定位置,這里的鍵和對象的鍵是類型的概念。使用散列表存儲數組時,通過一個散列函數將鍵映射為一個數字,這個數字的范圍是0到散列表的長度。
即使使用一個高效的散列函數,依然存在將兩個鍵映射為同一個值得可能,這種現象叫做碰撞。常見碰撞的處理方法有:開鏈法和線性探測法(具體概念有興趣的可以網上自信了解)
使用條件:
可以用于數據的插入、刪除和取用,不適用于查找數據
圖
圖由邊的集合及頂點的集合組成。地圖是我們身邊很常見的現實場景,比如每兩個城鎮都由某種道路相連。上面的每個城鎮可以看作一個頂點,連接城鎮的道路便是邊。邊由頂點對(v1, v2)定義,v1和v2分別是圖中的兩個頂點。頂點也有權重,也成為成本。如果一個圖的頂點對是有序的,則稱之為有向圖(例如常見的流程圖),反之,稱之為無序圖。
使用場景(用圖對現實中的系統建模):
交通系統,可以用頂點表示街道的十字路口,邊可以表示街道。加權的邊可以表示限速或者車道的數量。可以用該系統判斷最佳路線及最有可能堵車的街道。
任何運輸系統都可以用圖來建模。比如,航空公司可以用圖來為其飛行系統建模。將每個機場看成頂點,將經過兩個頂點的每條航線看作一條邊。加權的邊可以表示從一個機場到另一個機場的航班成本,或兩個機場間的距離,這取決于建模的對象是什么。
搜索圖的算法主要有兩種: 深度優先搜索和廣度優先搜索。
二叉樹和二叉查找樹
樹是計算機科學中經常用到的一種數據結構。樹是一種非線性的數據結構,以分層的方式存儲數據。
二叉樹每個節點的子節點不允許超過兩個。一個父節點的兩個子節點分別稱為左節點和右節點,通過將子節點的個數限定為2,可以寫出高效的程序在樹中插入、查找和刪除數據。
二叉查找樹(BST)是一種特殊的二叉樹,相對較小的值保存在左節點中,較大的值保存在右節點中。這一特性使得查找的效率很高,對于數值型和非數值型的數據,比如單詞和字符串,都是如此。
二叉查找樹實現方法
function Node(data, left, right) { // 創建節點 this.data = data; this.left = left; this.right = right; this.show = show } function show () { // 顯示樹的數據 return this.data } function BST () { // 二叉查找樹類 this.root = null; this.insert = insert; this.inOrder = inOrder; // inOrder是遍歷BST的方式 } function insert (data) { // 向樹中插入數據 var n = new Node(data, null, null) if (this.root == null) { this.root = n; } else { var current = this.root; var parent; while (true) { parent = current if (data < current.data) { current = current.left; if (current == null) { parent.left = n; break; } } else { current = current.right; if (current == null) { parent.right = n; break; } } } } }
遍歷BST的方式有三種:中序遍歷(以升序訪問樹中所有節點,先訪問左節點,再訪問根節點,最后訪問右節點)、先序遍歷(先訪問根節點,再以同樣的方式訪問左節點和右節點)、后序遍歷(先訪問葉子節點,從左子樹到右子樹,再到根節點)
感謝各位的閱讀,以上就是“javascript有沒有數據結構”的內容了,經過本文的學習后,相信大家對javascript有沒有數據結構這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。