在我們生活中,經常會面對這樣的問題:
“我要怎么整理我的衣柜?”
“電腦里照片太多了,怎么歸類才方便查找?”
其實,程序員也有類似的煩惱。他們不整理衣柜,而是“整理數據”。而這門關于如何“收納”和“使用”數據的學問,就叫做數據結構。
一、數據結構的基本概念
1、數據
數據是信息的載體,是數字、字符以及所有能輸入到計算機中并被計算機程序識別和處理的符號的集合。數據是計算機程序加工的原料。
2、數據元素
數據元素是數據的基本單位。
一個數據元素有若干個數據項組成(數據項是構成數據元素的最小單位)。
如下表所示,學生記錄就是一個數據元素,姓名、生日、年齡均為數據項,構成了一條學生記錄。
數據元素 | |||||
學生記錄 | 一個人 | 另一個人 | |||
數據項 | 姓名 | ||||
數據項 | 生日 | 年 | 數據項 | 組合項 | |
月 | 數據項 | ||||
日 | 數據項 | ||||
數據項 | 年齡 |
3、數據對象與數據結構
數據對象——具有相同性質的數據元素的集合
例如:全國所有門店的排隊顧客信息
數據結構——一種或多種特定關系的數據源的集合
例如:某個特定門店的排隊顧客信息和他們之間的聯系
4號、5號、6號都是A門店排隊顧客,4號在5號之前,5號在6號之前,他們具有特定關系,組成一個數據結構
5號、2號他們之間具有相同性質,同一個數據對象里的元素————
4號——>|5號|——>6號 A門店排隊顧客信息| || |
1號——>|2號|——>3號 B門店排隊顧客信息————
4、數據類型
原子類型(int、bool等)
結構類型(其值可以分解成若干成分)
Struct Customer{int num;int people;...
};
抽象數據類型(用數學化的語言定義數據的邏輯結構、定義運算。只有當要用計算機去是實現這種結構的時候才考慮哪種存儲結構。
二、數據結構三要素
數據的邏輯結構獨立于存儲結構,數據的存儲結構依賴于邏輯結構。
例如,有序表—>順序表/鏈表
1. 數據的邏輯結構
這指的是數據之間的關系。
常見的邏輯結構有:
- 集合:結構中的元素同2屬于一個集合外,別無其它關系,例如:{1,7,9}。
- 線性結構:像排隊買奶茶,前后有順序。例如:數組、鏈表。
- 樹形結構:像家譜,有祖先和后代。例如:二叉樹、家族樹。
- 圖形結構:像城市地鐵圖,站點之間可以相互連接。例如:社交網絡圖。
2. 數據的存儲結構
在存儲數據時,通常不僅要存儲各數據元素的值,而且要存儲數據之間的關系。
這個講的是數據如何放進計算機的內存里,關系到程序運行的效率。
常見的存儲方式有:
順序存儲(像數組)
就像地鐵列車車廂,每節車廂相連,不好插隊。鏈式存儲(像鏈表)
像一串鑰匙環,你可以隨意添加或拆掉中間的鑰匙。索引存儲
散列存儲
3. 數據的運算
施加在數據上的運算包括運算的定義和實現。
運算的定義是針對邏輯結構的,運算的實現是針對存儲結構的。
運算的實現,這是說我們能對這種結構的數據做哪些事,比如:
插入(加一個新的數據)
刪除(拿掉某個數據)
查找(找到你要的那條信息)
排序(按大小、字母、時間排序)