一、資料結構大致包含以下幾種儲存結構:
二、線性表
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 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...