1. 程式人生 > 實用技巧 >資料結構 第一節 第七課

資料結構 第一節 第七課

[toc]

資料結構

我們如何用 Python 中的型別來儲存一個班的學生資訊? 如果想要快速的通過學生姓名獲取其資訊呢?

實際上當我們在思考這個問題的時候, 我們已經用到了資料結構. 列表和字典都可以儲存一個班的學生資訊, 但是想要在列表中獲取一名同學的資訊時, 就要遍歷這個列表, 其時間複雜度為 O(n), 而使用字典儲存時, 可將學生姓名作為字典的鍵, 學生資訊作為值, 進而查詢時不需要遍歷可快速獲取到學生資訊, 其時間複雜度為 O(1).

注: 對於這樣的資料的組織方式, 我們就把他叫做資料結構

我們為了解決問題, 需要將資料儲存下來, 然後根據資料的儲存方式來設計演算法實現進行處理, 那麼資料的儲存方式不同就會導致需要不同的演算法進行處理. 我們希望演算法解決問題的效率越快越好, 於是我們就需要考慮資料究竟如何儲存的問題, 這就是資料結構.

在上面問題中我們可以選擇 Python 中的列表或字典來儲存學生資訊. 列表和字典就是 Python 內建幫我們封裝好的兩種資料結構.

概念

資料是一個抽象的概念, 將其進行分類後得到程式設計語言中的基本型別. 如: int, float, char 等. 資料元素之間不是獨立的, 存在特定關係, 這些關係便是結構. 資料結構指資料物件中資料元素之間的關係.

Python 給我們提供了很多現成的資料結構型別, 這些系統自己定義好的. 不需要我們自己去定義的資料叫做 Python 的內建資料結構, 比如列表, 元組, 字典. 而有些資料組織方式. Python 系統裡沒有直接定義, 需要我們自己去定義實現這些資料的組織方式, 這些資料組織方式稱為 Python 的擴充套件資料結構, 比如 棧, 佇列等.

演算法與資料結構的區別

資料結構只是靜態的描述了資料元素的關係.

高效率的程式需要在資料結構的基礎上設計和選擇演算法.

程式 = 資料結構 + 演算法

總結: 演算法是為了解決實際問題而設計的, 資料結構是演算法需要處理的問題載體

抽象資料型別 ( Abstract Data Type )

抽象資料型別 ( ADT ) 的含義是指一個數學模型以及在此數學模型上的一組操作. 即把資料型別和資料型別上的運算捆在一起, 進行封裝. 引入抽象資料型別的目的是把資料型別的表示和資料型別上運算實現與這些資料型別和運算在程式中的引用隔開, 使他們互相獨立.

最常見的資料運算有五種:

1. 插入

2. 刪除

3. 修改

4. 查詢

5. 排序