原创 最小生成樹
最小生成樹即在加權連通圖裏尋找n-1條邊,連接n個頂點,並且使得所有邊的權重之和最小。最小生成樹常用的算法有prim算法和kruskal算法。 1. prim算法 prim算法的基本步驟是:假設圖的頂點集合爲V,邊集合爲E,初始化集合U=
原创 單鏈表反轉C語言實現
單鏈表的反轉可以使用循環,也可以使用遞歸的方式 1.循環反轉單鏈表 循環的方法中,使用pre指向前一個結點,cur指向當前結點,每次把cur->next指向pre即可。 代碼: # include <iostream> # i
原创 多項式的表示
1.多項式的係數存放在數組中 # include <iostream> # include <cstdlib> # define max(x,y) ((x)>(y)?(x):(y)) using namespace std; const
原创 快速排序,歸併排序,堆排序python實現
快速排序的時間複雜度最好情況下爲O(n*logn),最壞情況下爲O(n^2),平均情況下爲O(n*logn),是不穩定的排序 歸併排序的時間複雜度最好情況下爲O(n*logn),最壞情況下爲O(n*logn),平均情況下爲O(n*logn
原创 判斷線段相交
1. 叉積的計算 爲了確定兩個點的相對位置,可以使用叉積 有兩個點p1和p2,如果p1xp2<0,則p1位於p2的順時針方向,p1xp2>0,則p1位於p2的逆時針方向。 p1的座標爲(x1,y1),p2的座標爲(x2,y2) 則p1x
原创 和最接近0的子序列
給定整數m,n和數組x[n],找出某個i,使得x[i]+x[i+1]+x[i+2]+x[i+3]+x[i+4]…x[i+m]最接近於零。 (0<=i<n-m) 一.暴力解法 遍歷各個i值,計算子序列的和,然後求出最接近0的 in
原创 IP地址和子網掩碼
A類IP地址 第一個字段的取值範圍:0-127 默認的子網掩碼:255.0.0.0 B類IP地址的第一個字段的取值範圍:128-191 默認的子網掩碼255.255.0.0 C類IP地址的第一個字段的取值範圍:192-223 默認的
原创 二叉查找樹python實現
1. 二叉查找樹的定義: 左子樹不爲空的時候,左子樹的結點值小於根節點,右子樹不爲空時,右子樹的結點值大於根節點,左右子樹分別爲二叉查找樹 2. 二叉查找樹的最左邊的結點即爲最小值,要查找最小值,只需遍歷左子樹的結點直到爲空爲止,同理,最
原创 B樹及其實現
B樹的定義 假設B樹的度爲t(t>=2),則B樹滿足如下要求:(參考算法導論) (1) 每個非根節點至少包含t-1個關鍵字,t個指向子節點的指針;至多包含2t-1個關鍵字,2t個指向子女的指針(葉子節點的子女爲空)。 (2) 節點的所
原创 二叉查找樹C語言實現
二叉查找樹C語言實現 1. 二叉查找樹的定義: 左子樹不爲空的時候,左子樹的結點值小於根節點,右子樹不爲空時,右子樹的結點值大於根節點,左右子樹分別爲二叉查找樹 2. 二叉查找樹的最左邊的結點即爲最小值,要查找最小值,
原创 setjmp()和longjmp()
1.語言沒有異常處理機制,可以使用setjmp和longjmp進行模擬,另外,goto語句不能在函數間跳轉,可以使用setjmp和longjmp完成函數間的跳轉。 使用setjmp()函數需要包含頭文件<setjmp.h> setjmp(
原创 計數排序、桶排序python實現
計數排序在輸入n個0到k之間的整數時,時間複雜度最好情況下爲O(n+k),最壞情況下爲O(n+k),平均情況爲O(n+k),空間複雜度爲O(n+k),計數排序是穩定的排序。 桶排序在輸入N個數據有M個桶時,如果每個桶的數據
原创 選擇排序、插入排序、冒泡排序python實現
選擇排序的時間複雜度爲O(n^2),是不穩定的排序 冒泡排序的時間複雜度最好情況下爲O(n),最壞情況下爲O(n^2),平均情況下爲O(n^2),是穩定的排序 插入排序的時間複雜度最好情況下爲O(n),最壞情況下爲O(n^2),,平均情況
原创 單鏈表反轉python實現
單鏈表的反轉可以使用循環,也可以使用遞歸的方式 1.循環反轉單鏈表 循環的方法中,使用pre指向前一個結點,cur指向當前結點,每次把cur->next指向pre即可。 代碼: class ListNode: d
原创 fork()和多線程
一、fork()函數 在操作系統的基本概念中進程是程序的一次執行,且是擁有資源的最小單位和調度單位(在引入線程的操作系統中,線程是最小的調度單位)。在Linux系統中創建進程有兩種方式:一是由操作系統創建,二是由父進程創建進程