成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

懂點算法之二——順序表

開發 前端 算法
對于開發而言,數組是我們經常打交道的數據類型,那么它的內部存儲結構是怎樣的呢?我們將進行詳細介紹。

[[407946]]

本文轉載自微信公眾號「前端萬有引力」,作者一川。轉載本文請聯系前端萬有引力公眾號。

寫在前面

對于開發而言,數組是我們經常打交道的數據類型,那么它的內部存儲結構是怎樣的呢?我們將進行詳細介紹。

線性表

線性表是最基本、最簡單,也是最常用的一種數據結構,線性表就是n個具有相同特性的數據元素的有序數列。

前驅元素:若A元素在B元素的前面,則稱A為B的前驅元素。

后驅元素:若B元素在A元素的后面,則稱B為A的后驅元素。

線性表的分類:線性表中數據存儲的方式是分為順序存儲和鏈式存儲,其中:

  • 順序存儲是用一段地址連續的存儲單元依次存儲線性表的數據元素。
  • 鏈式存儲是用一段地址不連續的存儲單元存儲數據,而使用結點進行連接查詢地址。

隨機訪問:由于線性表存儲在連續的內存位置,因此可以通過它們的索引來計算內存地址,以便隨機訪問數據。

順序表

順序表的存儲方式其實就是在內存中找到空位置后進行占位,然后將數據元素依次進行存放到空位置。

是不是聽起來有點像數組的結構,對的,數據就是一種線性表結構。因此我們可以使用數組進行表示順序表,線性表在邏輯結構上相鄰的數據元素存儲在相鄰的物理存儲單元中,即通過數據元素物理存儲的相鄰關系來反映數據元素間邏輯上的相鄰關系。

數組的長度是存放線性表的存儲空間的長度,分配存儲后這個量一般是不變的。線性表的長度是線性表中數據元素的個數,隨著線性表中插入和刪除操作的進行,這個量是變化的。切記,在任何時刻線性表的長度應該小于等于數組的長度。

  1. class SequenceList{ 
  2.   
  3.   constructor(){ 
  4.     // 存儲元素的數組 
  5.     this.elemList = []; 
  6.     // 當前順序表中的元素個數 
  7.     this.elemLength = 0; 
  8.   } 
  9.   // 將一個線性表置為空表 
  10.   clear(){ 
  11.     this.elemLength = 0; 
  12.   } 
  13.   // 判斷當前線性表是否為空表 
  14.   isEmpty(){ 
  15.     return this.elemLength === 0; 
  16.   } 
  17.   // 獲取當前線性表的長度 
  18.   length(){ 
  19.     return this.elemLength; 
  20.   } 
  21.   // 向線性表中添加元素 
  22.   insert(elem){ 
  23.     this.elemList[this.elemLength++] = elem; 
  24.   } 
  25.  
  26.   // 在第i個元素插入元素elem 
  27.   insertIndex(i,elem){ 
  28.     // 先將i索引位置的元素及其后面位置的元素依次向后移動一位 
  29.     for(let index = this.elemLength - 1; index > i; index--){ 
  30.       this.elemList[index] = this.elemList[index-1]; 
  31.     } 
  32.     // 把elem元素存放在i索引位置 
  33.     this.elemList[i] = elem; 
  34.   } 
  35.  
  36.   // 刪除指定位置i處的元素后,返回該元素 
  37.   remove(i){ 
  38.     // 記錄索引i處的值 
  39.     let current = this.elemList[i]; 
  40.     // 索引i后面元素依次向前移動一位即可 
  41.     for(let index = i; index < this.elemList - 1; index++){ 
  42.       this.elemList[index] = this.elemList[index+1]; 
  43.     } 
  44.     // 元素個數-1 
  45.     this.elemLength--; 
  46.     return current
  47.   } 
  48.  
  49.   // 查找elem元素首次出現在順序表的位置 
  50.   indexOf(elem){ 
  51.     for(let i = 0; i< this.elemLength; i++){ 
  52.       if(this.elemList[i] === elem){ 
  53.         return i; 
  54.       } 
  55.       return -1; 
  56.     } 
  57.   } 

數組的優缺點

優點:

  • 在內存空間的利用率高
  • 查詢元素效率高,通過元素下標進行存取

缺點:

  • 插入和刪除元素效率低。(在數組中間插入或刪除元素時,需要先移動遍歷整個表才能操作元素并重新排序)
  • 有空間長度限制,不能擴增線性表長度。(當存取元素長度大于順序表的元素個數時,會出現“溢出”;當元素長度小于預先分配的空間時,空間浪費嚴重)

小結

本篇文章是《懂點算法》系列的第二篇文章,主要講述的線性表的第一類順序存儲,以及介紹了如何實現順序存儲。

 

責任編輯:武曉燕 來源: 前端萬有引力
相關推薦

2021-06-28 06:15:14

算法Algorithm時間空間復雜度

2021-01-18 05:33:08

機器學習前端算法

2009-08-11 14:30:32

C#數據結構與算法

2013-12-24 09:38:50

asm.jsJavascript

2023-04-04 08:01:00

java坐標距離

2021-10-11 11:58:41

Channel原理recvq

2021-12-01 07:02:16

虛擬化LinuxCPU

2021-01-21 05:22:36

排序算法選擇

2022-05-09 11:52:38

Java卡片服務卡片

2022-03-04 15:43:36

文件管理模塊Harmony鴻蒙

2022-04-14 11:35:01

HarmonyOS手表Demo操作系統

2011-11-28 12:55:37

JavaJVM

2021-03-19 10:25:12

Java數據結構算法

2012-03-15 16:27:13

JavaHashMap

2021-10-28 19:27:08

C++指針內存

2021-12-17 07:47:37

TCASwiftUI 運作

2018-04-19 14:11:50

2021-02-15 15:36:20

Vue框架數組

2020-10-15 14:10:51

網絡攻擊溯源

2020-03-27 09:06:54

選擇排序算法冒泡排序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线视频免费观看 | 欧美精品在线一区 | 99国产精品久久久久老师 | 欧美黄色精品 | 欧美久久一级特黄毛片 | 国产精品96久久久久久 | 欧美精品一区在线发布 | 一区二区三区av | 搞av.com | 精产国产伦理一二三区 | 欧美日日 | 青久草视频 | av一区二区三区四区 | 久久97精品| 亚洲综合二区 | 国产探花在线精品一区二区 | 国产成人午夜精品影院游乐网 | 男女视频免费 | 天天草av| 玖玖国产| 五月激情综合网 | 国产成人精品久久二区二区91 | 狠狠操天天干 | 成人精品国产免费网站 | 青青草视频免费观看 | 日韩中文字幕 | 久久久久久亚洲精品 | 日韩欧美一区二区三区 | 亚洲一区二区三区欧美 | 欧美国产日韩精品 | 欧美精品一区二区在线观看 | 国产精品国产精品国产专区不蜜 | 视频在线观看一区 | 91xxx在线观看 | 一二三四在线视频观看社区 | 欧美激情久久久 | 人人人干 | 欧美成人精品一区二区三区 | 一区中文字幕 | 久久中文字幕电影 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 |