問題:
一、如何區分單個的字符和只有一個字符的字符串?
二、對象是如何關聯到彼此的?
三、怎麼讓形參與實參匹配?
四、算法不太懂程序員
第八章、抽象數據類型與子程序
一、抽象數據類型(ADT):屬性(數據和操做)明確地與特定實現分離的容器。{應用(或用戶層)是特定問題中的數據的視圖。邏輯或抽象層是數據值域和處理他們的操做的抽象視圖,實現層明確表示出了存放數據項的結構,並對操做碼進行操做。每種ADT都具備特定的行爲,稱它們爲容器是由於它們存在的惟一目的就是存放其餘對象}
二、容器:存放和操做其餘對象的對象
三、棧與隊列
(棧):是一種抽象複合結構,只能從一端訪問棧中的元素,能夠在第一個位置插入元素,也能夠刪除第一個元素。咱們取走的第一個元素正是最後放入其中的那個元素。
(棧的另外一種描述方法):刪除的項老是在棧中時間最短的項目,插入操做沒有任何約束,整個LIFO行爲都體如今刪除操做上。棧是使元素以相反的順序輸出。
(隊列):隊列中的項目從一端入,從另外一端出。FIFO,先進先出,與棧不一樣。插入操做在尾部進行,刪除操做在隊列的頭部進行。
(隊列的另外一種說法):刪除的老是在隊列中時間最長的項目
四、列表:三個屬性:項目是同構的,項目是線性的,列表是變長的。所謂線性則指的就是每一個項目除了第一個都有一個獨特的組成部分在它以前,除了最後一個也都有一個獨特的組成部分在它以後。列表可被形象化爲鏈式結構
(棧、隊列、列表的不一樣):棧和隊列對刪除操做有所有的定義,列表一般提供插入一個項目的操做,刪除一個項目的操做,檢索一個項目是否存在以及報告列表中項目數量。因此列表中的項目必需要可以相互比較。列表不是數組,但他們三者本質上都是線性的,只模擬了一種數據關係
五、鏈式結構:一個將數據項和找到下一項位置的信息保存到同一容器的實現方法。
六、樹:分層體系結構,一般說二叉樹,即最多有兩個子節點的樹。一個節點至多隻有一個指向它的節點
七、二叉樹:二叉樹是一種抽象結構,每一個節點能夠有0、一、2個後繼節點,叫作子女。樹的頭部是一個起始節點,叫作根,他不是任何節點的子女,存放在節點左邊的叫左子女,存放在右邊的叫作右子女。若是一個節點沒有子女,這個節點叫作樹葉,稱爲葉節點
除了根節點外,每一個節點只有一個父母節點,根節點仍是樹中其餘全部節點的先輩。
八、二叉檢索樹:樹相似於一個無序列表,搜索的依據能夠記爲:任何節點的值都要大於它的左子樹中全部節點的值,都要小於它的右子樹中全部節點的值。因此當你想要搜索一個在樹中存在的數的話,先從源頭找起,先看看和根相比,這個數字是大是小,大在右邊,小在左邊,而後繼續與左子樹或者右子樹進行比較,直到找到所想要的數字。若是這個數字並不存在於其中,比較方式也很相似,仍然按照上面的方法可是會得出矛盾的結論。這樣就能夠證實這個數字是不存在於二叉樹中的。
九、二叉檢索樹的搜索效率:其效率與樹的形狀有直接關係。樹的形狀是由項目插入樹的順序決定的。
十、如何構造二叉檢索樹?
插入節點的總體流程:算法
把父節點設置爲當前節點,即根節點。
若是新節點內的數據值小於當前節點內的數據值,那麼把當前節點設置爲當前節點的左子節點。若是新節點內的數據值大於當前節點內的數據值,那麼就跳到步驟 4。編程
若是當前節點的左子節點的數值爲空(null),就把新節點插入在這裏而且退出循環。不然,跳到 while 循環的下一次循環操做中。數組
把當前節點設置爲當前節點的右子節點。
若是當前節點的右子節點的數值爲空(null),就把新節點插入在這裏而且退出循環。不然,跳到 while 循環的下一次循環操做中。
十一、如何輸出二叉搜索樹中的數字?
按算法升序輸出了二叉檢索樹中的項目
十二、圖
圖由一組節點和一組把節點相互鏈接起來的邊構成的數據結構
頂點:圖中的節點
邊:表示圖中兩個節點的鏈接的頂點對
1三、圖的分類:無向圖:其中的邊沒有方向的圖
有向圖:其中的邊是從一個頂點指向另外一個頂點(或同一個頂點)的圖
加權圖:有附加值的圖
鄰頂點:經過邊鏈接起來的兩個頂點
路徑:鏈接圖中兩個頂點的一系列頂點
1四、如何建立圖:(1)、在表格中添加一個頂點
(2)、在表格中添加一條邊
(3)、在表格中添加一個權值
1五、圖算法
深度優先搜索、廣度優先搜索、單源最短路搜索
深度優先搜索:檢查第一個與起點相鄰的頂點,若是是他就結束,若是不是他就檢查全部與第一個頂點相鄰的頂點
廣度優先搜索:按照前後順序進行搜索。讓對頭走,把與這個走了的人相鄰的壓進來
單源最短路搜索:這個計算比較複雜,加到最小便可
1六、子程序:算法和子算法之間的計算
1七、參數傳遞
參數列表:程序中兩部分之間的通訊機制
形參:列在子程序名後的括號中的標識符
實參:子程序調用中列在括號中的標識符
值參:由調用單元傳入實參的副本
引用參數:由調用單元傳入實參的地址的形參
第九章、面向對象設計與高級程序設計語言
一、對象:在問題背景中相關的事物或實體
二、對象類:一組具備類似的屬性和行爲的對象的描述
二、域:類中的特定項,能夠是數據或子程序
四、方法:定義了累的一種行爲的特定算法
五、設計方法
設計方法包括集體討論:爲的是生成解決某個特定問題要用到的候選類的列表。
過濾:僅用於啓動模擬程序,這些共同的屬性和行爲能夠組合在一塊兒。
場景:給每一個類分配責任
封裝:把數據和動做集中在一塊兒,使數據和動做的邏輯屬性與它們的實現細節分離
責任算法:知識和動做
責任的加入過程:建立、輸出和加入。加入這個動詞是讓某人準備數據的指令
六、翻譯過程:用匯編語言編寫的程序要輸入彙編器,由他把彙編語言翻譯成機器碼,最終執行的是彙編器輸出的機器碼,使用高級語言。
編譯器:把用高級語言編寫的程序翻譯成機器碼的程序
解釋器:輸入用高級語言編寫的程序,指導計算機執行每一個語句指定的動做的程序
字節碼:編譯Java源代碼使用的標準機器語言,標準化的高級語言實現的可移植性與把JAVA程序翻譯成字節碼而後在解釋它的可移植性是不一樣的。用高級語言編寫的程序可以在任何具備適合的編譯器的機器上編譯和運行,程序將被翻譯成計算機可以直接執行的機器碼,Ada編譯器就是把其語言翻譯成字節碼。
七、程序設計語言的範形
兩種主要的範形:分別是命令和聲明的
命令式範形:具備順序執行指令的特徵,變量的使用表明了內存地址,而使用賦值語句則改變這些變量的值
面向過程的範形和麪向對象的範形,,面向過程的範形指的是語句被分爲子程序,而後每一層執行整個問題求解的一個必要的特定任務。面向對象的範形:數據對象是活躍的,對象和操做對象的代碼綁定在一塊兒,使得每一個對象負責控制本身的操做
聲明式範形:是一個描述結果的模型,可是完成結果的過程不被描述。有兩種基本模型,分別是函數式和邏輯式
函數式模型:計算經過對函數求值來實現,而問題求解經過函數調用來實現。所以基本的原理是函數的求值,而不是變量和賦值語句
邏輯編程:邏輯編程基於象徵邏輯的原則,這個模型包括了一系列關於對象的事實和一系列關於對象間關係的規則。一個程序包括了向這些對象和關係詢問能夠經過事實和規則推演的問題。
布爾表達式:一個標識符序列,標識符之間由相容的運算符分割,求得的值是TRUE或false.
關係運算符是比較兩個值的運算符。小於,小於等於,大於大於等於,不等於,等於
強類型化:每一個變量都有一個類型,只有這種類型的值才能存儲到該變量中
數據類型:一組值以及可以應用於這種類型的值得基本操做集合的說明
大多數高級語言都有四種數據類型
整數、實數、字符和布爾型
整數實數字符和布爾型稱爲簡單數據類型或原子數據類型,由於每一個值都是獨立的,不能再分割
字符串:是一個字符序列
聲明:把變量、動做、或者語言中的其餘實體與標識符關聯起來的語句,使程序員能夠經過名字引用這些項目
保留字:一種語言中具備特殊意義的字,不能用它做爲標識符
區分大小寫:大寫字母和小寫字母被看做是不一樣的,兩個拼寫方法相同但大小不一樣的標誌服被看作是不一樣的標識符
控制結構:肯定程序中的其餘指令的執行順序的指令。
異步:不與計算機中的其餘操做同時發生,換句話說,與計算機的動做不一樣步
封裝:實施信息隱蔽的語言特性
對象類或類:屬性和行爲類似的一組對象的說明
對象:與問題背景相關的事物或實體
對象(實現階段):類的一個實例
類(實現階段):對象的模式
實例化:建立類的對象
實例化:建立類的對象
繼承:類獲取其餘類的屬性的機制
多態:一種語言的繼承體系結構中具備兩個同名方法且可以根據對象應用合適的方法的能力數據結構