第一次正式算法課

在這裏插入圖片描述

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(4);
	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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章