數據結構概述
- 定義:
- 我們如何把現實中大量而複雜的問題以特定的數據類型和特定的存儲結構(個體和個體關係)保存到主存儲器(內存)中,以及在此基礎上爲實現某個功能(比如查找/刪除某個元素、排序等)而執行的相應操作,這個相應的操作也叫算法。
- 數據機構 = 個體 + 個體關係
- 算法 = 對存儲數據的操作
算法
- 解題的方法和步驟。
- 衡量算法的標準:
- 1.時間複雜度
- 大概程序要執行的次數,而非執行的時間(因爲不同機器執行時間不一樣)
- 2.空間複雜度
- 算法執行過程中大概所佔用的最大內存
- 3.難易程度
- 4.健壯性
- 1.時間複雜度
預備知識
- 指針
-
引入概念:地址
- 定義:內存單元的編號,從0開始的非負整數。
- CPU能夠直接訪問內存,CPU與內存靠三根線連接,地址線(確定單元編號)、控制線(控制是寫入還是輸出)和數據線(數據傳輸)
-
指針就是地址,指針變量是存放內存單元地址的變量。
-
指針本質就是一個操作受限的非負整數。
-
指針的分類:
- 基本類型的指針
- 指針和數組的關係
-
指針案例:
- 如何通過被調函數修改主調函數的中局部變量的值(傳參:存放該局部變量的指針變量&+變量名;接收參數:傳遞參數的變量類型的地址值數據,eg:int * i);
- 如何通過被調函數修改主調函數中一維數組的內容(傳參:①存放數組首元素的指針變量,②存放數組長度的整型變量。tips:p[i]等同於*(p+i))。
- 無論是什麼類型的變量(包括指針變量),以&+變量名(即地址)作爲實參,都可以改寫變量值。
-
-
結構體
- 爲什麼會出現結構體
- 爲了表示一些複雜的數據,普通的基本類型變量無法滿足要求。
- 什麼叫結構體
- 是類的過渡,結構體即只有屬性沒有方法的類。
- 用戶根據實際需求自己定義的複合數據類型。
- 如何使用結構體
- 注意事項
- 結構體變量不能加減乘除,但可以相互賦值;
- 普通結構體變量和結構體指針變量作爲函數傳參的問題(使用指針傳參有效節約內存,提升速度)。
- 爲什麼會出現結構體
-
動態內存的分配和釋放
學習大綱
- 模塊一:線性結構
- 連續存儲(數組)
- 離散存儲(鏈表)
- 線性結構的兩種常見應用之一:棧
- 線性結構的兩種常見應用之二:隊列
- 專題:遞歸
- 模塊二:非線性結構
- 圖
- 樹
- 模塊三:查找和排序
- 折半查找
- 排序
- 冒泡
- 選擇
- 插入
- 快速排序
- 歸併排序