引子中將強型別這個詞設定成了粗體,主要是因為我想從這個話題開始討論關於語言及與語言不相關的抽象資料型別。
那麼何為型別,型別存在的意義是什麼?何為強型別呢?
要回答這個問題,我們需要從編譯器、記憶體分配的角度去考慮。眾所周知,在計算機的世界裡,操作的所有data都是用0與1的組合表示(記憶體或者磁碟中),0或者1又是以乙個bit儲存的,8個bit又組成了1個byte....為了確定乙個資料由多少個0與1組合而成,即為了確定某個資料占用多少個bit,就有了如下的示意圖:
[img]
站在程式語言的角度型別存在的意義有兩點:
1.編譯器在編譯期需要確定某個資料占用多少個儲存單元,便於執行期分配記憶體。
2.站在程式設計師的角度,型別可以用來表示現實世界存在的事物。
所以所有的強型別語言都會規定資料型別由多少位多少位元組來儲存,如c的int型別。
這就引申出各種強型別語言的基本資料型別、抽象資料型別占用儲存單元的長度問題,試想如下問題:
int array[10];
該陣列占用多少記憶體呢?
(需要考慮特定語言及特定編譯器)
明白了以上問題,我們接下來討論抽象資料型別(adt)。
首先,需要明確,什麼是抽象資料型別?
用我自己的話來說來說就是由基本資料型別組成的資料型別,如乙個一維的整型陣列。
抽象資料型別存在的意義在於,當我們要解決特定問題時,抽象資料型別可以為我們提供合適的儲存形式及檢索方法。
其次,針對乙個問題,如何選擇最合適(從演算法的空間複雜度與時間複雜度去考慮)的資料結構呢?
一組資料載入到記憶體後只進行簡單的查詢(不考慮大量資料的極端情況),那麼從演算法的角度來說我們選擇線性表較為合適;
該組資料需要插入或刪除某些資料,選擇鍊錶比較合適。
在處理大資料時,hash表又成了乙個很好的選擇。
...1.線性表:一塊連續分配的儲存單元
對線性表的所有操作都可以通過陣列來實現,這裡就不做討論了。
2.鍊錶:為了避免線性表的插入及刪除的線性開銷,我們需要允許表可以不連續儲存,所以就有了鍊錶的一般想法:
[img]
每個節點持有乙個指向下乙個節點的引用或者指標,使整個表結構呈現出乙個鏈條的形式。
mysql的基本原理 Mysql 基本原理
mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...
pwm控制的基本原理 PWM控制的基本原理
pwm pulse width modulation 控制 脈衝寬度調製技術,通過對一系列脈衝的寬度進行調製,來等效地獲得所需要波形 含形狀和幅值 pwm控制技術在逆變電路中應用最廣,應用的逆變電路絕大部分是pwm型,pwm控制技術正是有賴於在逆 變電路中的應用,才確定了它在電力電子技術中的重要地位...
8 2 1 基本原理
乙個舞台動畫物件在包含許多舞台資訊 出現在何處,佔多大面積,處在什麼角度,是否可見 這些資訊分別儲存在動畫物件的屬性中。在 中讀取這些屬性可以了解物件的位置 大小 角度等狀態資訊 修改這些屬性可以改變物件的位置 大小 角度等狀態。如果從資料的角度去理解,動畫就是在固定時間間隔點不斷修改動畫物件某項屬...