資料結構和演算法

2021-08-28 12:10:06 字數 1865 閱讀 9787

一、資料結構大致包含以下幾種儲存結構:

二、線性表

1、順序表的資料結構:一段連續的物理記憶體空間,插入資料時,空間不足需要 realloc()

typedef struct tabletable;
2、鍊錶建立:可以有頭結點,也可以不要頭結點head。

基本操作,包括對鍊錶中資料的新增、刪除、查詢(遍歷)和更改。

typedef struct linklink;
3、靜態鍊錶:

typedef struct component;
4、雙向鍊錶:單鏈表更適合 "從前往後" 找,而 "從後往前" 找並不是它的強項

typedef struct lineline;
三、棧(stack)和佇列(queue)

1、順序棧和鏈棧

2、順序佇列和鏈式佇列

四、字串

1、串的模式匹配演算法:判斷兩個串之間是否具有"主串與子串"關係的演算法。有以下兩種:

普通的模式匹配演算法 bf 演算法

快速模式匹配演算法 kmp 演算法

五、陣列和廣義表

1、稀疏矩陣的壓縮儲存:

2、三元組順序表:

//矩陣的結構表示

typedef struct tsmatrix;

3、廣義表(必須是鏈式儲存結構):廣義表儲存的形式 ls = },廣義表 ls 儲存了乙個原子 1 和子表 。

//方式一:

typedef struct glnodeptr;//子表結點的指標域,hp指向表頭;tp指向表尾

};}*glist;

//方式二:

typedef struct glnode;

struct glnode * tp;//這裡的tp相當於鍊錶的next指標,用於指向下乙個資料元素

}*glist;

六、樹

1、二叉樹首先是有序樹。分兩種儲存結構:

順序儲存:只有完全二叉樹才能是順序儲存結構

鏈式儲存:...

typedef struct bitnodebitnode,*bitree;
2、回溯演算法,也即「試探法」:走不通就回退再走的方法就是回溯法。

七、圖(graph)

1、資料之間的關係有 3 種:

"一對一":線性表;

"一對多" :樹

"多對多":圖

2、連通圖:圖中從乙個頂點到達另一頂點,若存在至少一條路徑,則稱這兩個頂點是連通著的。無向圖中,如果任意兩個頂點之間都能夠連通,則稱此無向圖為連通圖。

3、生成樹:連通圖中,由於任意兩頂點之間可能含有多條通路,遍歷連通圖的方式有多種,往往一張連通圖可能有多種不同的生成樹與之對應。

4、普里姆演算法(prim演算法)求最小生成樹

克魯斯卡爾演算法(kruskal演算法)求最小生成樹

八、動態記憶體管理

九、查詢演算法

1、十、排序演算法

1、迭代器 :advance和distance的用法

vector::iterator it = vec.begin();

vector::iterator end = vec.end();

cout<<"the value of vector:";

for(;it != vec.end();it++)

cout<<*it<<" ";

cout<2、

資料結構和演算法

判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...

資料結構和演算法

程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...

資料結構和演算法

一 資料結構 1.概念 資料結構就是資料之間的結構關係,或者理解成資料元素之間存在的一種或者多種特定關係的集合,在傳統上資料結構分為邏輯結構與物理結構 1 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...