【数据结构与算法】通俗易懂说链表
一:概述
鏈表(Linked list)由一些節點組成,物理存儲非連續的線性表。其中每個節點都會存儲下個節點的指針,由于實際存儲空間不連續,對鏈表插入節點,刪除節點可以達到O(1)的復雜度,但是對一個節點的訪問需要O(n)的時間。
鏈表有單向鏈表,雙向鏈表。
二:單向鏈表
單向鏈表的每個節點有數據項和指針(指向下個節點地址數據)組成,下圖為一個單向鏈表,表頭沒有數據項,只有指向下一個節點的指針。表尾節點指向下一個節點pNext指針為NULL(空)。
結構體表示為:
//單向鏈表節點數據結構 typedef?struct?linkNode {void?*val;?//數據項(任意類型)struct?linkNode *next; }node;插入節點操作:
單向鏈表中由四個數據節點,數據1,數據2,數據3,數據4,現在數據1和數據2節點間插入數據5,只需把數據1節點的pNext指向新的節點,把新節點的pNext指向數據2節點即可。
刪除節點操作:
刪除節點2,只需把第一個節點的pNext執行數據3節點,同時釋放節點2的存儲空間即可。
三:雙向鏈表
雙向鏈表有別于單向的,每個節點除了數據項外有兩個指針分別指向前一個節點和后一個節點,占用空間會大一些,可以實現從頭到尾的遍歷,又可以從尾到頭遍歷。
結構體表示為:
//雙向鏈表節點數據結構 typedef?struct?dLinkNode {void?*val;?//數據項(任意類型)struct?dLinkNode?*prev;??????struct?dLinkNode?*next; }node;插入節點操作:
節點1與節點2之間插入新節點5,需要把節點1的pNext指向節點5,節點5的pHead指向節點1,節點5的pNext指向節點2,節點2的pHead指向節點5,如下圖所示:
刪除節點操作:
刪除節點2,把節點1的pNext指向節點3,把節點3的pHead指向節點1,同時釋放節點2的存儲空間即可。
四:鏈表與數組區別
1.鏈表存儲空間不連續,可以充分利用碎片空間,數組的存儲空間是連續的,內存空間要求高,必須要有足夠連續的內存空間。
2.鏈表的插入刪除元素簡單,無需對元素移動,但查詢元素會慢,數組對元素的插入刪除較復雜,同時使用時要預先指定長度,但數組的查詢會很快。
最后,為大家準備一篇「Java最常見200+面試題全解析」,助力大家找到合適的工作,這份面試題包含的模塊有:
Java、Jvm 最常見面試題解析;
Spring、Spring MVC、MyBatis、Hibernate 面試題解析;
MySQL、Redis 面試題解析;
RabbitMQ、Kafka、Zookeeper 面試解析;
微服務 Spring Boot、Spring Cloud 面試解析。
掃描下面二維碼付費閱讀
【End】
關注下方二維碼,訂閱更多精彩內容。
轉發朋友圈,是對我最大的支持。
總結
以上是生活随笔為你收集整理的【数据结构与算法】通俗易懂说链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript数组去重方法汇总
- 下一篇: 面试官:数据量大的情况下分页查询很慢,有