日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链表和顺序表的一些区别

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表和顺序表的一些区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

順序表與鏈表是非常基本的數據結構,它們可以被統稱為線性表。

線性表(Linear List)是由 n(n≥0)個數據元素(結點)a[0],a[1],a[2]…,a[n-1] 組成的有限序列。

順序表和鏈表,是線性表的不同存儲結構。它們各自有不同的特點和適用范圍。針對它們各自的缺點,也有很多改進的措施。

一、順序表

順序表一般表現為數組,使用一組地址連續的存儲單元依次存儲數據元素,如圖 1 所示。它具有如下特點:

  • 長度固定,必須在分配內存之前確定數組的長度。
  • 存儲空間連續,即允許元素的隨機訪問。
  • 存儲密度大,內存中存儲的全部是數據元素。
  • 要訪問特定元素,可以使用索引訪問,時間復雜度為?O(1)O(1)
  • 要想在順序表中插入或刪除一個元素,都涉及到之后所有元素的移動,因此時間復雜度為?O(n)O(n)

圖 1 順序表

順序表最主要的問題就是要求長度是固定的,可以使用倍增-復制的辦法來支持動態擴容,將順序表變成“可變長度”的。

具體做法是初始情況使用一個初始容量(可以指定)的數組,當元素個數超過數組的長度時,就重新申請一個長度為原先二倍的數組,并將舊的數據復制過去,這樣就可以有新的空間來存放元素了。這樣,列表看起來就是可變長度的。

一個簡單的實現如下所示,初始的容量為 4。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <string.h> struct?sqlist { ????int?*items, size, capacity; ????sqlist():size(0), capacity(4) { ????????// initial capacity = 4 ????????items =?new?int[capacity]; ????} ????void?doubleCapacity() { ????????capacity *= 2; ????????int* newItems =?new?int[capacity]; ????????memcpy(newItems, items,?sizeof(int)*size); ????????delete[] items; ????????items = newItems; ????} ????void?add(int?value) { ????????if?(size >= capacity) { ????????????doubleCapacity(); ????????} ????????items[size++] = value; ????} };

這個辦法不可避免的會浪費一些內存,因為數組的容量總是倍增的。而且每次擴容的時候,都需要將舊的數據全部復制一份,肯定會影響效率。不過實際上,這樣做還是直接使用鏈表的效率要高,具體原因會在下一節進行分析。

二、鏈表

鏈表,類似它的名字,表中的每個節點都保存有指向下一個節點的指針,所有節點串成一條鏈。根據指針的不同,還有單鏈表、雙鏈表和循環鏈表的區分,如圖 2 所示。

圖 2 鏈表

單鏈表是只包含指向下一個節點的指針,只能單向遍歷。

雙鏈表即包含指向下一個節點的指針,也包含指向前一個節點的指針,因此可以雙向遍歷。

循環單鏈表則是將尾節點與首節點鏈接起來,形成了一個環狀結構,在某些情況下會非常有用。

還有循環雙鏈表,與循環單鏈表類似,這里就不再贅述。

由于鏈表是使用指針將節點連起來,因此無需使用連續的空間,它具有以下特點:

  • 長度不固定,可以任意增刪。
  • 存儲空間不連續,數據元素之間使用指針相連,每個數據元素只能訪問周圍的一個元素(根據單鏈表還是雙鏈表有所不同)。
  • 存儲密度小,因為每個數據元素,都需要額外存儲一個指向下一元素的指針(雙鏈表則需要兩個指針)。
  • 要訪問特定元素,只能從鏈表頭開始,遍歷到該元素,時間復雜度為?O(n)O(n)
  • 在特定的數據元素之后插入或刪除元素,不涉及到其他元素的移動,因此時間復雜度為?O(1)O(1)。雙鏈表還允許在特定的數據元素之前插入或刪除元素。

在上一節說到,利用倍增-復制的辦法,同樣可以讓順序表長度可變,而且效率比鏈表還要好,下面就簡單的實現一個單鏈表來驗證這一點,至于元素插入的順序就不要在意了。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <stdio.h> #include <time.h> ?? struct?node { ????int?value; ????node *next; }; struct?llist { ????node *head; ????void?add(int?value) { ????????node *newNode =?new?node(); ????????newNode->value = value; ????????newNode->next = head; ????????head = newNode; ????} }; int?main() { ????int?size = 100000; ????sqlist list1; ????llist list2; ????long?start =?clock(); ????for?(int?i = 0;i < size;i++) { ????????list1.add(i); ????} ????long?end =?clock(); ????printf("sequence list: %d\n", end - start); ????start =?clock(); ????for?(int?i = 0;i < size;i++) { ????????list2.add(i); ????} ????end =?clock(); ????printf("linked list: %d\n", end - start); ????return?0; }

在我的電腦上,鏈表的耗時大約是順序表的 4~8 倍。會這樣,是因為數組只需要很少的幾次大塊內存分配,而鏈表則需要很多次小塊內存分配,內存分配操作相對是比較慢的,因而大大拖慢了鏈表的速度。這也是為什么會出現內存池。

因此,鏈表并不像理論分析的那樣美好,在實際應用中要受很多條件制約,一般情況下還是安心用順序表的好。

總結

以上是生活随笔為你收集整理的链表和顺序表的一些区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九一天堂| 国产伦精品一区二区三区照片91 | 97人人射| 国产福利在线视频 | 熟妇高潮喷沈阳45熟妇高潮喷 | 亚洲午夜精品一区 | 成都电影免费大全 | jizz久久| 男人插女人网站 | 日韩精品观看 | 国产在线综合视频 | 亚洲国产专区 | 无码成人精品区在线观看 | 免费a网址 | 色漫在线观看 | 4438x在线观看 | 天堂网在线观看视频 | www.日韩.com | 18岁成年人网站 | 日本久久综合 | 91高跟黑色丝袜呻吟动态图 | gogo人体做爰aaaa | 久久爱影视| 一区二区三区免费在线视频 | 日韩欧美高清在线 | 日本特级片 | eeuss一区 | av资源免费 | 色哟哟在线免费观看 | 丁香婷婷网 | 亚洲精品不卡 | 久av在线 | 亚洲av成人无码一二三在线观看 | 成人一级黄色 | 四虎av| 不卡av在线免费观看 | 少妇视频网站 | 少妇厨房愉情理伦bd在线观看 | 99在线免费观看视频 | 国产av精国产传媒 | 欧美精品一级二级三级 | 国产美女毛片 | 成人免费网站视频 | 深夜精品视频 | 97精品熟女少妇一区二区三区 | 秋霞欧美视频 | 欧美色一区二区三区在线观看 | 欧美精品日韩少妇 | 91精品国产乱码 | 亚洲www啪成人一区二区麻豆 | 在线欧美日韩国产 | 国产精品中文字幕在线观看 | 亚洲免费视 | 国产欧美一区二区三区视频在线观看 | 精品欧美乱码久久久久久 | 在线看片资源 | 综合图区亚洲 | 久久久男人天堂 | 日韩欧美第一页 | 色人综合 | 一区二区三区久久精品 | 日韩少妇精品 | 日韩欧美视频二区 | 欧美极品少妇×xxxbbb | 黄色小视频在线 | 国产手机视频在线 | 四虎网站在线观看 | 日本青青草视频 | 内谢少妇xxxxx8老少交视频 | 国产麻豆精品久久一二三 | free性护士vidos猛交 | 日本视频黄色 | 亚洲啪 | 精品欧美乱码久久久久久 | 亚洲精品国产99 | 亚洲午夜精品一区 | 强行糟蹋人妻hd中文字幕 | 亚洲视频在线观看网站 | 欧美国产日韩一区 | 在线午夜av | 久草资源在线视频 | 蝌蚪av| 爱搞逼综合 | 黄色同人网站 | 尤物视频网站在线观看 | 操你啦免费视频 | 亚欧激情 | 日日弄天天弄美女bbbb | 看全黄大色黄大片美女人 | 少妇导航av | 不卡视频在线观看免费 | 95国产精品 | 国产国产乱老熟女视频网站97 | 香蕉久久国产av一区二区 | 天天看天天摸 | 奇米网在线观看 | 欧美乱插| 好吊视频在线观看 | 国产国产精品 |