1. 數據結構 (基礎支撐)
數據(Data){
1.存儲在某種介質上,
2.可識別,
3.物理符號
要素{
1.類型(type):例 int
2.值(value) 例 32767
}
}
// 用來識別信息的基本組成單位
數據元素(DATA Element){
1. 若干數據的集合
2. 用來表示現實世界的一個完整的信息
}
// 對數據的處理方法
數據結構{
1. 邏輯結構:數據結構中數據元素之間存在的邏輯聯繫
A. 集合式:數據元素之間是散列的(無聯繫)
B. 線性 :數據元素之間存在線性關係(棧,隊列)
C. 非線性聯繫{
a. 樹狀關係
b. 圖狀關係
}
2. 物理(存儲)結構(存儲結構) : 數據元素的物理存儲
A. 順序存儲(用連續的存儲單元來存儲(數組))
B. 鏈式存儲(用不連續的存儲單元(鏈表))
衡量標準{
1. 邏輯結構(時間複雜度)
2. 物理結構(空間複雜度)
}
1. 數組不是數據結構,存入了啥就叫啥邏輯結構
2. 時間複雜度不是運行時間
3. 貪心,DP,回溯,最短路徑,分治,遞歸,深搜廣搜,,,,
}
2. 算法 (方案)
線性表: 用來表示數據集合中數據元素之間的邏輯關係
表示{
1. 數據集合
2. 數據元素之間的邏輯次序
}
例:DataList{
春-夏-冬-秋 (數據集合的數據元素是沒有次序的)
邏輯次序: 圖例法 春->夏->秋->冬
}
二元組來表示: DataRelationship = {<春,夏> <夏,秋> <秋,冬>}
序偶表示
線性表的特點
1 2 3 4
(首元素) (尾元素)
1. 前驅
2. 後繼
首元素:線性表中沒有前驅的元素叫做首元素
尾元素:線性表中沒有後繼的元素叫做尾元素
非終端元素: 線性表中有唯一的前驅和唯一的後繼的元素叫非終端元素
1. 順序表 : 把一個線性表,用連續的存儲結構存儲
順序表是線性表
用數組存儲
2. 實現順序表{
1. 要有一個數據集合
2. 要有一個數組(連續)
}
聲明一個連續的存儲單元
1. 定義一個數組 數據類型+數組名[元素個數]
*2. 聲明一個動態數組
malloc(字節數)--在內存中分配多少個字節
問題
1. 是否分配成功
2. 分配成功在哪裏
3. 放什麼類型的值
返回值{
成功 返回首字節地址
失敗 返回null
}
若單元分配成功返回首字節的地址
但是改地址無類型(void)
通過強制類型轉換
例:在內存中分配 4 個內存單元
int *p;
p = (int*)malloc(4);
#include <stdio.h>
#include <stdlib.h>
int main ( void ) {
int * p;
p = ( int * ) malloc ( 5 * sizeof ( int ) ) ;
if ( ! p) {
printf ( "分配失敗" ) ;
} else {
printf ( "分配成功" ) ;
}
for ( int i = 0 ; i < 5 ; i++ ) {
p[ i] = i;
}
for ( int i = 0 ; i< 5 ; i++ ) {
printf ( "%d " , p[ i] ) ;
}
printf ( "\n" ) ;
printf ( "%d %d" , * p, sizeof ( int ) ) ;
return 0 ;
}