原创 二叉樹設計(二)

本文學習上文提到的二叉樹實現的第二個方法:建立二叉樹類。 首先補一個知識點:前面我們用遞歸實現了遍歷,那麼我們是否能用非遞歸結構實現遍歷呢?答案是:可以的。在遞歸學習中我們知道轉換的方法通常有兩種,都要用到堆棧,因此,即便是不分析遍歷特點

原创 堆棧應用——表達式計算

簡述:表達式在我們人類的眼裏很直觀簡單,但想讓機器理解並進行計算就是問題了,書裏介紹了堆棧來變換表達式形式讓機器理解的方法— —中綴表達式變換爲後綴表達式,再翻譯後綴表達式進行計算。但代碼實現竟然只有後綴表達式到計算的這一部分,真是fuc

原创 矩陣

矩陣用二維數組來處理最爲方便,書上還是採用基於向量類設計矩陣,把一維數組作爲對象存放到向量類中,拼接爲二維數組。 矩陣類:(只實現矩陣加) package ArrayVectorSetMatrix; /** * @author sun *

原创 數組和向量類

數組是n個相同數據類型的數據元素構成的佔用一塊地址連續的內存單元的有限集合,所以線性結構(包括線性表、堆棧、隊列、串、數組和矩陣)的順序存儲結構實際就是使用數組來存儲。所以,不像線性表等結構要特意的學習,感覺數組是我們接觸程序語言開始就拿

原创 線索二叉樹

過完五一快拿不起書了~哎~一本數據結構拖了這麼久 前面說到用遊標類來實現分步遍歷,那麼線索二叉樹就是另一種分步遍歷方式。區別在於:二叉樹遊標類只能從前向後分步遍歷二叉樹,而線索二叉樹既可以從前向後也可以從後向前分步遍歷。 前面提到的所有遍

原创 隊列學習

隊列也是一種線性表,具有兩種數據存儲結構,隊列中只允許在隊尾插入和在隊頭刪除,是先進先出表。 和堆棧一樣我們先定義隊列中基本的功能並提供接口: package StackAndQueue; /** * @author sun * 創建時間

原创 樹和二叉樹

樹: 樹是一種結點集合,其中每個結點最多隻有一個直接前驅結點,但可以有若干個直接後繼結點。樹的結構表示了數據元素之間的層次關係。 常用術語:結點:由數據元素和構造數據元素之間關係的指針組成;結點的度:即結點擁有的子樹的個數;葉結點:度爲0

原创 特殊矩陣——稀疏矩陣

對於一個m×n的矩陣,設s爲矩陣的元素總個數s=m×n,設t爲矩陣中非零元素的個數,滿足t<<s的矩陣稱爲稀疏矩陣。一個不稀疏的矩陣稱作稠密矩陣。 稀疏矩陣的零元素非常多,且分佈無規律,所以稀疏矩陣的壓縮存儲方法爲:只存儲矩陣中的非零元素

原创 串的模式匹配算法

模式匹配是在主串(也稱目標串)中,從給定的起始位start開始查找是否存在我們需要的子串(也稱模式串),如果查找成功返回模式串的第一個字符在主串中的位置,當模式匹配失敗,返回-1。常用的模式匹配算法有Brute_Force算法和KMP算法

原创 遞歸算法(補)

Java數據結構中有一章來講遞歸算法~作爲補充。 算法存在自調用的情況一般有兩種(1)問題的定義是遞推的,比如階乘。(2)問題的解法存在自調用,比如折半查找。遞歸算法用把問題分解爲形式更加簡單的子問題的方法來求解問題,它既是一種有效的分析

原创 遞歸之整數劃分問題和排列問題

 整數劃分問題:將正整數n表示成一系列正整數之和;將最大加數n1不大於m的劃分個數記作q(n,m)  遞歸式如下:q(n,m) = 1     n=

原创 二叉樹設計(一)

二叉樹鏈式存儲結構下,有兩種基本的實現方法:(1)首先設計二叉樹結點類,然後在二叉樹結點類的基礎上,用static成員函數實現對二叉樹的操作,把這些函數封裝在一個類中。(2)也是在二叉樹結點類的基礎上,再設計一個二叉樹類來實現。 大白話翻

原创 數據結構——集合

集合是具有某種相似特性的事物的全體。它的重要特點是其中的數據元素無序且不重複,這也就是判斷是否使用該容器的依據。 集合類既可以基於向量類來實現,也可以用其他方法比如基於哈希表來實現,本文討論基於向量類。首先我們要在上文建立的向量類中添加四

原创 特殊矩陣——n階對稱矩陣

特殊矩陣指:矩陣中有許多值相同的元素(包括0),且這些元素的分佈有一定規律。當矩陣的維數比較大時,矩陣佔據的內存單元相當多,這時,利用特殊矩陣數據元素的分佈規律壓縮矩陣的存儲空間,對許多應用問題來說有重要是意義。 特殊矩陣壓縮存儲的方法有

原创 串——自定義MyStringBuffer類

上一篇自定義了MyString類,在字符串操作時不會改變原串的值。本文的MyStringBuffer類作爲緩衝串類,在字符串操作時可以改變原串的值,所以必須採用可變長的數組存儲結構,比如在字符串連接時數組要先加長自己的空間再將字符串拼接到