數據結構:是相互之間存在一種或多種特定關係的數據元素的集合。
1.基本數據結構:
集合:不存在任何關係。
線性結構:一對一的關係。例如學生信息表就是一個線性結構:其中包括學號、姓名、班級、性別、出生年月。
樹形結構:一對多的關係。樹形結構具有嚴格的層次關係。家族關係是典型的樹形結構。
圖形結構:多對多的關係。四個城市的公路交通圖是典型的圖狀結構,又稱網狀結構。
2.算法:
描述算法的好壞:算法時間複雜度。
對某一特定類型的問題的求解步驟的一種描述。是指令的有限序列。其中每條指令表示一個或多個操作。
算法複雜度:該算法的運行時間與問題規模的對應關係。通常把算法中的基本重複執行的次數(頻度)作爲算法的時間複雜度。算法中的基本操作一般是指算法中最深層循環句的語句。
3.算法時間複雜度
算法中基本操作重複執行的頻度T(n)是問題規模n的某個函數f(n).記作:T(n)=O(f(n)).
O表示:隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同。或者說"O"表示數量級的概念。
O(1).常數階:算法沒有循環語句,則算法中基本操作執行頻度與問題規模n無關。
O(n).算法只有一個重循環,基本操作的執行頻度與問題規模n呈線性增大關係。
O(n*n)[就是n的平方]:平方階 除此之外還有立方階,對數階等。
舉例:O(N) O(N*N) O(N*N*N)
x=n; for( int i=1;i<n;i++ ) x=n;
y=0; { y=0;
while(y<x) for(j=0;j<n;j++) while(x>=(y+1)(y+1))
{ { {
y=y+1; A[i][j]=i*j; y=y+1;
} } }
}
3.線性表
具有相同類型的數據元素的一個有限序列。
相同類型:指的是線性表中的數據元素都屬於同種類型。
有限:指的是線性表中的數據元素個數是有限的,線性表中的每一個數據元素都有自己的位置。
基本操作:用接口表示
public interface IListDS<T>
{
int GetLength();//求長度
void Clear();//清空操作
bool IsEmpty();//判斷線性表是否爲空
void Append();//追加操作
void Insert();//插入操作
T Delete(int i);//刪除操作
T GetElem( int i );//取出不刪除
int Locate( T value);//按值查找某個位置
}
4.線性表種類
順序表、單向鏈表、雙向鏈表、循環鏈表
順序表是指用一塊地址連續的存儲空間依次存儲線性表的數據元素。
特點:容量固定、訪問速度快
順序表典型方法:追加、插入、刪除
@追加
0 1 2 3 4 5 6
50 |
datas指向存儲空間的數組。 last指向最後一次操作的索引 比如上圖last=0,沒有值就爲-1.
追加操作時間複雜度:和已經存在的數據沒有任何關係。時間複雜度O(1).
@插入
順序表上的插入操作,時間主要消耗在數據的移動上。
最好的情況下:插入末尾,沒有移動。相當於追加。
最壞的情況下:插入頭部,即第0個下標位置。
平均移動次數:n/2
時間複雜度爲:O(n)
@ 刪除
刪除操作時間和插入操作相似,時間主要消耗在數據的移動上。
最好的情況下:刪除末尾,無移動
最壞的情況下:刪除頭部,移動n-1次。
平均移動:(n-1)/2
時間複雜度:O(n)