網站首頁 編程語言 正文
相信如果看完了上期順序表的小伙伴應該發現了順序表的諸多缺點:
?? 中間/頭部的插入刪除,時間復雜度為O(N)!
?? 增容需要申請新的空間,拷貝數據,釋放舊空間,會有不少的消耗。
?? 增容一般是呈倍增長,勢必會有一定的空間浪費。
鏈表的OJ題會單獨出一期的哦!
那么,如何解決以上的問題呢?
?? 那么什么是鏈表呢?—— 鏈表是一種物理存儲結構上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的 。
?實際中要實現的鏈表的結構非常多樣,以下情況組合起來就有8種鏈表結構:
1. 單向、雙向? ? ? ? ?2. 帶頭、不帶頭? ? ? ? ? ? 3. 循環、非循環
我們只講最簡單和最復雜的,畢竟一句老話,冬天到了春天還會遠嗎???
今天我們講無頭單向非循環鏈表,下期講帶頭雙向循環鏈表 !
好的,有了上面的認識正式進入我們本期的學習??。
無頭單向非循環鏈表:結構簡單,一般不會單獨用來存數據。實際中更多是作為其他數據結 構的子結構,如哈希桶、圖的鄰接表等等。另外這種結構在筆試面試中出現很多。
?我們來看到單鏈表的架構:
??? 單鏈表和順序表不一樣,我們是需要的時候動態申請一個節點空間就夠了!
SLTNode* BuySListNode(SLTDataType x) { SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode)); if (newnode == NULL) return NULL;//做空指針判斷 newnode->data = x; newnode->next = NULL; return newnode; }
這里我們利用malloc函數開辟了一個SLTNode大小的空間(得用SLTNode* 來接收),malloc和realloc一樣如果開辟失敗會返回空指針,所以這我們需要先做判斷!不為空則把數據放入data,并且把指向下一個節點的 next 置空!并且返回新節點的地址!(這里如果不明白則需要補充結構體,指針,動態內存開辟的知識)
?? 首先我們還是來實現單鏈表的頭部插入數據!
這里我們可以看到,不帶哨兵位(帶頭鏈表)鏈表需要改變頭指針位置,下期我們學帶頭雙向循環鏈表就可以不用雙指針了!
?? 下面是我們的單鏈表尾部插入數據!
?? 接著來實現單鏈表頭部刪除數據!
??? 下面來到單鏈表的尾部刪除數據!
?? 在指定元素前插入節點!
?這個我們首先需要找到指定節點元素的地址!
?接下來就是實現我們的指定元素前插入節點的函數了!
同理我們接著來實現刪除指定元素的節點!
最后其實還有一個修改節點數據,這個看了上期的順序表實現起來就很簡單,留給你們自己研究去啦!學好編程多想,多敲代碼準沒錯!?
????????那么以上這就是我們無頭單向非循環鏈表的常見接口了,如果你看完感覺比較吃力看不懂的話,建議多去回顧下c語言指針,結構體,動態內存這幾張的內容!當你能把這個單鏈表理解透徹了,下一期的帶頭雙向循環鏈表也很容易理解的,代碼實現起來更輕松,加油吧!
最后還是那句話??我們一起快樂編程不頭禿!
gitee(碼云):Mercury. (zzwlwp) - Gitee.com??
原文鏈接:https://blog.csdn.net/m0_61784621/article/details/123352525
相關推薦
- 2022-04-21 Mybatis - tk.mybatis deleteByPrimaryKey無法正確識別主鍵
- 2023-07-18 優化MybatisPlus的saveBatch方法
- 2022-12-07 react?app?rewrited替代品craco使用示例_React
- 2022-08-22 Python基礎異常處理梳理總結_python
- 2022-05-22 C#單例模式與多線程用法介紹_C#教程
- 2022-11-04 ASP.NET?MVC使用正則表達式驗證手機號碼_實用技巧
- 2022-07-07 redis連接報錯error:NOAUTH?Authentication?required_Redi
- 2022-07-17 Python中使用tkFileDialog實現文件選擇、保存和路徑選擇_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支