<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      golang實現(xiàn)常用集合原理介紹

      golang本身對常用集合的封裝還是比較少的,主要有數(shù)組(切片)、雙向鏈表、堆等。在工作中可能用到其他常用的集合,于是我自己對常用的集合進(jìn)行了封裝,并對原理做了簡單介紹,代碼庫地址:https://github.com/chentaihan/container,代碼都是經(jīng)過測試的,歡迎下載使用,反饋的問題我會第一時間修復(fù)

       

      ArraySort排序數(shù)組

      ArraySort使用數(shù)組保存數(shù)據(jù),新增的時候通過類似二分查找找到插入位置,插入位置后面的數(shù)據(jù)往后移動一位,插入新元素,查找就是二分查找,刪除就是通過二分查找找到對應(yīng)的元素,之后的元素都向前移動一位。時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(n)
      刪除 O(n)
      查找 O(logn)

      LinkList單鏈表

      通過鏈表頭指針和鏈表尾兩個指針將所有元素鏈接在一起,可以快速的在表頭和表尾插入元素,刪除和查找都是遍歷鏈表,查找對應(yīng)的元素,刪除還需要改變指針指向。時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(1)
      刪除 O(n)
      查找 O(n)

      Queue循環(huán)隊列

      隊列先進(jìn)先出,循環(huán)隊列采用數(shù)組保存元素,以循環(huán)的方式在數(shù)組中添加元素,當(dāng)數(shù)組寫滿之后自動擴(kuò)容,元素個數(shù)小于1M時二倍擴(kuò)容,大于等于1M時每次加1M,刪除元素的時候需要將對應(yīng)的位置賦值為空指針,方便被刪除的元素被回收。時間復(fù)雜度如下:

      功能時間復(fù)雜度
      進(jìn)隊列 O(1)
      出隊列 O(1)

      QueueLink鏈表隊列

      隊列先進(jìn)先出,實現(xiàn)和單鏈表類似,進(jìn)棧是在表尾添加元素,出棧就是表頭出棧,即表頭指向表頭的下一個元素,相對數(shù)組實現(xiàn)的循環(huán)隊列,鏈表隊列不存在擴(kuò)容的問題,但每個元素多了一個指針。時間復(fù)雜度如下:

      功能時間復(fù)雜度
      進(jìn)隊列 O(1)
      出隊列 O(1)

      PriorityQueue優(yōu)先級隊列

      優(yōu)先級隊列采用小堆實現(xiàn),小堆采用數(shù)組保存數(shù)據(jù),按照完全二叉樹的方式操作數(shù)據(jù),每個節(jié)點的值都小于等于左右子節(jié)點的值,保證了每次出隊的都是最小值,即按照順序出隊。

      時間復(fù)雜度如下:

      功能時間復(fù)雜度
      進(jìn)隊列 O(logn)
      出隊列 O(logn)

      Stack棧

      棧先進(jìn)后出,采用數(shù)組保存元素,每次進(jìn)棧的是棧頂元素,出棧的也是棧頂元素,當(dāng)數(shù)組寫滿之后自動擴(kuò)容,元素個數(shù)小于1M時二倍擴(kuò)容,大于等于1M時每次加1M。時間復(fù)雜度如下:

      功能時間復(fù)雜度
      進(jìn)棧 O(1)
      出棧 O(1)

      StackLink鏈表棧

      隊列先進(jìn)先出,采用單鏈表保存數(shù)據(jù),進(jìn)棧是在表頭添加元素,出棧就是表頭出棧,即表頭指向表頭的下一個元素,相對數(shù)組實現(xiàn)的循環(huán)隊列,鏈表隊列不存在擴(kuò)容的問題,但每個元素多了一個指針。時間復(fù)雜度如下:

      功能時間復(fù)雜度
      進(jìn)棧 O(1)
      出棧 O(1)

      Map

      對golang的map簡單封裝,增加了一些方法。對于golang中map的實現(xiàn)原理請看我的這篇文章:http://www.rzrgm.cn/hlxs/p/10408961.html,時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(1)
      修改 O(1)
      查詢 O(1)
      刪除 O(1)

      MapSync同步map

      就是map+讀寫鎖,時間復(fù)雜度和map一樣

      LinkMap

      雙向鏈表 + map,雙向鏈表按照順序保存新增的元素,可以按照添加的順序遍歷數(shù)據(jù),增刪改查時間復(fù)雜度都和map一樣

      TreeMap

      通過二叉搜索樹保存數(shù)據(jù),后面會詳細(xì)介紹二叉搜索樹,使用二叉搜索樹就不存在擴(kuò)容的問題,hashmap則存在擴(kuò)容的問題,時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(logn)
      修改 O(logn)
      查詢 O(logn)
      刪除 O(logn)

      LRU

      lru的實現(xiàn)原理其實和LinkMap幾乎一樣,只不過lru在修改或是查詢的時候都會將被訪問的元素移到鏈表的表頭,表尾的數(shù)據(jù)是最先被淘汰的,時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(1)
      修改 O(1)
      查詢 O(1)
      刪除 O(1)

      BinaryTree二叉搜索樹

      提供二叉搜索樹的增刪改查功能,刪除相對復(fù)雜點,時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(logn)
      修改 O(logn)
      查詢 O(logn)
      刪除 O(logn)

      heap大堆

      堆是對golang本身container/heap的簡單封裝,大堆中某個節(jié)點的值總是不大于其父節(jié)點的值;堆總是一棵完全二叉樹。,時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(logn)
      查詢 O(n)
      刪除 O(logn)

      heap小堆

      堆是對golang本身container/heap的簡單封裝,小堆中某個節(jié)點的值總是不小于其父節(jié)點的值;堆總是一棵完全二叉樹。,時間復(fù)雜度如下:

      功能時間復(fù)雜度
      新增 O(logn)
      查詢 O(n)
      刪除 O(logn)

       

      posted @ 2020-04-20 14:43  古文觀芷  閱讀(1341)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩精品亚洲aⅴ在线影院| 国产360激情盗摄全集| 人妻熟女欲求不满在线| 国产大尺度一区二区视频| 兴仁县| 日韩精品一区二区都可以| 国产一区二区在线有码| 真人性囗交视频| 亚洲免费视频一区二区三区| 五级黄高潮片90分钟视频| 精品国产av一二三四区| 蜜臀av久久国产午夜福利软件| 欧洲精品码一区二区三区| 临潭县| 精品亚洲女同一区二区| av新版天堂在线观看| 国产69精品久久久久久妇女迅雷| 亚洲av综合色一区二区| 人妻人人做人碰人人添| 久久国产一区二区日韩av| 94人妻少妇偷人精品| 少妇被无套内谢免费看| 欧美成人aaa片一区国产精品| 日本另类αv欧美另类aⅴ| 老司机性色福利精品视频| 中文成人在线| 国产肥妇一区二区熟女精品| 精品久久人人做爽综合| 国产精品天天看天天狠| 人妻夜夜爽天天爽三区麻豆av| 好吊视频在线一区二区三区| 国产精品国产三级在线专区| 护士的小嫩嫩好紧好爽| 亚洲成av人片乱码色午夜| 久久精品国产亚洲av麻豆软件| 动漫AV纯肉无码AV电影网| 99精品国产一区二区三| 蜜臀av久久国产午夜福利软件| 国产午夜福利片在线观看| 精品中文人妻在线不卡| 丁香婷婷色综合激情五月|