[size=small][color=olive][b]資料結構之 --陣列
陣列是應用的最廣泛的資料儲存結構,它被植入到大部分程式語言中;
物件的名字就是該物件對應記憶體位址的引用,並不是物件的本身;
如何使用物件導向運算元據結構:
首先將資料儲存結構從程式需中分離出,程式的其他部分稱為使用這個結構的使用者;第二部則是改進儲存結構和使用者之間的通訊;
學會將程式劃分成類:
解釋:資料儲存結構本身就是累,程式中使用這個結構的部分也是類,通過將長鬚劃分成兩個類,可以使程式的功能清晰,使之更加容易設計和
理解;抽象的概念:
從what中將how分離出來的過程,即類中的操作如何進行,相對什麼事類使用者可見的,被稱為抽象。抽象是軟體工程的重要方面。
把類的功能抽象出來後,可以使程式設計更簡單,因為不需要在設計的初期就考慮細節問題;
小貼士:用來儲存資料物件的類有時被稱為容器類;(container class);
在陣列中的查詢方式:
線性查詢:按順序,逐一的進行匹配;
二分查詢:將陣列資料項範圍不斷對半分割來查詢特定的資料項。在有序陣列中占有很大的優勢;
二分查詢的核心**:[/b][/color][/size]
/* 使用二分查詢的演算法 */
long b = ;
public int find(long searchkey)else if(lower>upper)elseelse}}
}
[size=small][color=olive][b]有序陣列:
優點:使用有序陣列最大的優點是查詢的速度比無序陣列快的多了;
不足:插入刪除比較慢;
對數:使用對數的乙個方程可以求出二分查詢中步數對應的範圍;
每次對範圍加倍可以建立出乙個數列,它是2的冪;設s表示步數,r表示範圍,則:
r=2^s
如果已知步數s,通過該方程可以得出範圍r;例如:s=6;r=64;
大 o 表示法:用來評價計算機演算法的效率;(粗略的度量方法被稱作"大o 表示法");
演算法效率示例:
無序陣列的插入:無序陣列中的插入是見到的唯一乙個 與陣列中的資料項個數無關的演算法,
新資料項總是被放在下乙個有空的地方,a[a.length()],然後該值增加,無論陣列中
的資料項個數n有多大,一次插入的總是用相同的時間。那麼說明:向乙個無序陣列中插入乙個資料項的
時間t是乙個常數k:
常數 t=k;
線性查詢:與n成正比 (n為資料總數)
尋找特定資料項所需的比較次數平均為資料項總數的一半;因此設n為資料項總數,搜尋時間
t與n的一半成正比;
t=k*n/2;
二分查詢:
t=k*㏒2(n)
說明:由於所有的對數都和其他對數成比例,那麼可以將為底數的常數併入k,不指定底數:
t=k*log(n);
大 o 表示法:
大o表示法在上面表示方法的基礎上省去了常數k,當比較演算法時,並不在乎具體的微處理晶元或
編譯器;真正需要比較的是對應不同的n值,t是如何變化的,而不是具體的數字。因此不需要常數;
大o表示法使用大寫字元o,可以認為其含義是"order of"(大約是),我們可以使用大o表示
法來描述線性查詢使用了o(n)級時間,二分查詢使用了o(log n)級時間,向乙個無序陣列中的插入
使用o(1),或常數級時間;
大o表示法的實質並不是對執行時間給出實際值,而是表達了執行時間是如何受資料項個數所影響的。
除了實際安裝後真正測量一次演算法的執行時間之外,這可能是對演算法進行比較的最有意義的方法了;
[/b][/color][/size]
資料結構介紹
當你決定看這篇文章,就意味著系統學習資料結構的開始。本節,我們先來講什麼是資料結構。什麼是資料結構 資料結構,直白地理解,就是研究資料的儲存方式。我們知道,資料儲存只有乙個目的,即為了方便後期對資料的再利用,就如同我們使用陣列儲存 是為了後期取得它們的加和值,無緣由的資料儲存行為是對儲存空間的不負責...
資料結構 陣列
建立陣列 大小為50 棧空間存myarray引用 堆空間存乙個大小為50,預設值為0的陣列。棧空間myarray引用指向堆空間該陣列。int myarray new int 50 public class testarray public class testarray if s intarray....
資料結構 陣列
陣列 就是相同型別的資料按一定順序排列的集合,把有限個型別相同的資料元素用乙個名字表示,通過編號來區分。名字即為陣列名,編號即為下標。陣列是最簡單 使用最廣泛的一種資料結構,其實就是一塊連續的記憶體,哪怕物理上不連續,邏輯上也是連續的,連續存放著一組相同型別資料元素。陣列的定義 type 變數名 n...