
# 計算機的幾個重要概念
## 計算機和現實
## 內存和數據結構
#### 內存的組織結構

***
如圖,內存的物理結構是由數據及數據所對應的地址所組成的。不論是讀內存還是寫內存,我們操作的過程一定是
尋址->以特殊的方式讀寫
數據都是以0,1比特的方式在內存中存放,但是相同的比特串通過不同的處理得到的表示含義是不同的。
#### 數據結構
不論數據結構研究的是什么內容(鏈表,樹,圖等等)最后都可以用上面的那張圖來表示,即通過地址來表示數據之間的關系。那數據結構的本質便是:研究數據在內存中的組織方式(基于其物理特點)。
我們所做的操作便是賦值和以正確的方式來組織地址,以讓數據之間的關系得以表示。
## 算法
如果從抽象的角度來看,抽象數據結構得到的上層便是算法。算法主要研究的是:基于數據結構來解決具體的問題。算法希望利用內存的物理結構來高效的組織解決問題的特定步驟,也解決復雜問題。
## 抽象
(自己想了好久關于抽象的定義,一直不知道如何去描寫,偶然在《C++沉思錄》上看到關于抽象的敘述,猶如醍醐灌頂。現將其摘錄在下面)
抽象是有選擇的忽略。編程也依賴于一種選擇,選擇忽略什么和何時忽略。也就是說,編程就是通過建立抽象來忽略那些我們此刻并不重視的因素。
我最鐘情的工具有一個共性,那就是抽象的概念。當我處理大問題的時候,這樣的工具總是能幫助我將問題分解成獨立的子問題,并能確保它們相互獨立。也就是說,當我處理問題的某個部分的時候,完全不必擔心其他部分。
例如,假設我正在用匯編語言寫一個程序,我必須時常考慮機器的狀態。我可以支配的工具是寄存器,內存,以及運行于這些寄存器、內存上的指令。要用匯編語言做成任何意見有用的事情,就必須把我的問題用這些特定的概念表達出來。
即使是匯編語言也包含了有用的抽象。首先是編寫的程序在機器執行之前先被解釋了。這就是匯編語言寫程序和直接在機器上寫程序的區別。更難以察覺的是,對于機器設計者來說,“寄存器”和“內存”的概念本身就是抽象。如果拋開抽象不同,則程序的運行就要表示成處理器內無數門電路的狀態變換。如果你的想象力夠豐富的話,就可以看到初此之外還有更多的抽象。
高級語言提供了更復雜的抽象。甚至用表達式去代替一連串單獨的算術指令的想法,也是非常重大的。這種想法在20世紀50年代首次被提出時顯得很不同凡響,以至于后來成為了FORTRAN命名的基礎:Formula Translation。抽象如此有用,因此程序員不斷發明新的抽象,并且運用到他們的程序中。結果幾乎所有的程序都給用戶提供了一套抽象。
## 語言
* 基本元素
* 基本元素的組合能力
* 語言抽象的能力