目錄
資料結構概述
預備知識:
模組:定義:如何把現實中大量複雜的問題以特定的資料型別和特定的儲存結構儲存到主儲存器中(記憶體)中, 以及在此基礎上為實現某乙個功能而執行的相應操作,這個相應的操作也叫演算法。
特定的資料型別和結構是指:如果我們儲存少量的資料,我們可以使用陣列(連續);如果儲存大量的資料,我們就必須使用鍊錶(不連續,通過指標相連);如果我們還要儲存資料item之間的關係,如乙個部門的上下級關係,我們就必須使用樹來儲存;如果我們要儲存乙個城市的地圖(任何節點之間都可能產生關係),那我們必須使用圖來儲存。
資料結構 = 個體的儲存+個體的關係儲存
演算法 = 對儲存資料的操作
演算法:解題的方法和步驟
衡量演算法的標準
1. 時間複雜度:大概程式要執行的次數,而非執行的時間
2. 空間複雜度:演算法執行過程中大概所占用的最大記憶體
3. 難易程度
4. 健壯性
資料結構的地位:
資料結構是軟體中最核心的課程
程式 = 資料的儲存 + 資料的操作 + 可以被計算機執行的語言
1)指標:
指標是c語言的靈魂 ;
表示一些複雜的資料結構 ;快速的傳送資料;使函式返回乙個以上的值;能直接訪問硬體 ;能夠方便的使用陣列和字串;是理解物件導向語言中引用的基礎
定義:位址,記憶體單元的編號。指標變數佔4個位元組。指標就是位址 位址就是指標;指標變數是存放記憶體單元位址的變數;指標的本質是乙個操作受限的非負整數
分類:1. 基本型別的指標
int *i;
如何通過被調函式修改主調函式中普通變數的值
ⅱ 形參為以該變數的型別為型別的指標變數
ⅲ在被調函式中通過 *形參變數名 的方式就可以修改主函式相關變數的值
void f(int * p) //不是定義了乙個名字叫做*p的形參, 而是定義了乙個形參,該形參名字叫做p,它的型別是int *
int main(void)
2. 指標和陣列的關係
指標 和 一維陣列
陣列名一維陣列名是個指標常量,它存放的是一維陣列第乙個元素的位址, 它的值不能被改變一維陣列名指向的是陣列的第乙個元素
int a[5] = ;
printf("%p\n", *a+1);//平移四個位元組位址
double arr[3];
double *q;
q = &arr[0];
q = &arr[1]; //平移8個位元組位址,但指標變數只佔4個位元組
void show_array(int * p, int len)
; //分號不能省
int main()
注意事項
結構體變數不能加減乘除,但可以相互賦值
普通結構體變數和結構體指標變數作為函式引數的問題
傳輸的時候最好傳輸指標:位址,而不要傳輸變數,因為變數可能需要傳輸很多位元組,而指標始終傳輸的是四個位元組。
動態記憶體的分配和釋放
int * parr = (int *)malloc(sizeof(int) * len);//等價於 int parr[len]
*parr = 4;//等價於a[0] = 4
parr[1] = 10;//等價於a[1] = 10
free(parr);
1、 malloc只有乙個int型的形參,表示要求系統分配的位元組數
2、 malloc函式的功能是請求系統len個位元組的記憶體空間,如果請求分配成功,則返回第乙個位元組的位址,如果分配不成功,則返回null
3、 malloc函式能且只能返回第乙個位元組的位址,所以我們需要把這個無任何實際意義的第乙個位元組的位址(俗稱幹位址)轉化為乙個有實際意義的位址,因此malloc前面必須加(資料型別 *),表示把這個無實際意義的第乙個位元組的位址轉化為相應型別的位址。如:
int *p = (int *)malloc(50);
表示將系統分配好的50個位元組的第乙個位元組的位址轉化為int *型的位址,更準確的說是把第乙個位元組的位址轉化為四個位元組的位址,這樣p就指向了第乙個的四個位元組,p+1就指向了第2個的四個位元組,p+i就指向了第i+1個的4個位元組。p[0]就是第乙個元素, p[i]就是第i+1個元素
double *p = (double *)malloc(80);
表示將系統分配好的80個位元組的第乙個位元組的位址轉化為double *型的位址,更準確的說是把第乙個位元組的位址轉化為8個位元組的位址,這樣p就指向了第乙個的8個位元組,p+1就指向了第2個的8個位元組,p+i就指向了第i+1個的8個位元組。p[0]就是第乙個元素, p[i]就是第i+1個元素
free(p)
釋放p所指向的記憶體,而不是釋放p本身所占用的記憶體
模組一:線性結構
連續儲存[陣列]
離散儲存[鍊錶]
線性結構的兩種常見應用之一 棧
線性結構的兩種常見應用之二 佇列
專題:遞迴
1+2+3+...+100
求階乘漢諾塔
走迷宮模組二: 非線性結構樹圖
模組三: 查詢和排序
折半查詢
排序:冒泡
快速排序
插入排序
選擇排序
歸併排序
1 資料結構概述
資料結構的研究物件為問題中資料元素及其相互關係。具體來說,資料結構的研究內容包括資料的邏輯結構 資料的儲存結構 資料的運算3個方面。資料的邏輯結構指資料之間的邏輯關係。資料元素的邏輯結構可以分兩大類 線性結構與非線性結構。線性結構 元素之間存在一一對應的關係 非線性結構 每個資料元素可能與0個或多個...
資料結構NO1 概述
位 bit binary digit的簡稱,只能儲存1或0的二進位制數字。位元組 byte 8位構成乙個位元組。乙個位元組可存乙個字元。可表示256個不同的字元。常用的處理方式有下列幾種任務方式 排序 sort 將資料按照某一鍵值排序,以供後期提取 歸併 merge 將倆種以上相同性質的檔案資料歸併...
資料結構概述
1 資料 資料是資訊的的載體,是描述客觀事物的數 字元,以及所有能輸入到計算機中並被電腦程式識別和處理的符號的集合。資料大致可以分為 數值型資料 整數 浮點數 複數 雙精度數等 非數值型資料 字元 字串,以及文字 圖形 影象 語音等資料 2 資料結構 data structure 資料結構有兩個層次...