原创 端口分類

“端口“是英文port的意譯,可以認爲是設備與外界通訊交流的出口。端口可分爲虛擬端口和物理端口,其中虛擬端口指計算機內部或交換機路由器內的端口,不可見。例如計算機中的80端口、21端口、23端口等。物理端口又稱爲接口,是可見端口,

原创 TCP層URG、PSH標識

在TCP層,有個FLAGS字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG. 其中,對於我們日常的分析有用的就是前面的五個字段。 它們的含義是: SYN表示建立連接, FIN表示關閉連接, A

原创 歸併排序

基本思想: 它將要排序的序列分成兩個長度相等的子序列,爲每一個子序列進行排序,然後再將子序列合併成一個有序的序列。合併兩個子序列的過程稱爲兩路歸併。 void MergeSort(int *arr, int n) {

原创 模擬實現strlen、strcpy、strncpy、strcat、strcmp

int my_strlen(const char* str) { assert(str); int count = 0; while (*str++) { coun

原创 路由生產算法

路由器使用路由算法來找到到達目的地的最佳路由。當說“最佳路由”時,考慮的參數包括諸如跳躍數(分組數據包在網絡中從一個路由器或中間節點到另外的節點的行程)、延時以及分組數據包傳輸通信耗時。 路由:數據包從源地址到目的地址所需要經過的

原创 判斷一棵樹是否是完全二叉樹

這道題可以看作是層序遍歷的變形。 在二叉樹的層序遍歷中,我們藉助一個數據結構隊列,根據其先進先出的性質,實現層序遍歷。 可以定義一個flag標誌位,一旦遇到空節點,標誌位生效。 相關代碼如下: #include<iostream

原创 交換排序——冒泡排序

冒泡排序 第一趟冒泡將最大的數冒在最後,第二趟將次大的數冒上去,以此類推。 void BubbleSort(int *arr, int n) { int end = n - 1; while (end > 0

原创 NAT技術與代理服務器

NAT技術 在計算機網絡中,網絡地址轉換(Network Address Translation,縮寫爲NAT),也叫做網絡掩蔽或者IP掩蔽(IP masquerading),是一種在IP數據包通過路由器或防火牆時重寫來源IP地址

原创 判斷一棵樹是否是平衡二叉樹及其時間複雜度的優化

平衡二叉樹:它是一棵空樹或者左右子樹的高度差絕對值不超過1,並且左右兩棵子樹都是平衡二叉樹。 要判斷一棵樹是否是平衡二叉樹,由其定義我們很容易想到通過計算出左右兩棵子樹的高度及其高度差來進行判斷。 首先,判斷當前節點是否是平衡二叉

原创 二叉樹的鏡像

求一棵二叉樹的鏡像,歸根結底就是交換這棵樹及其每個子樹的左右節點。 通過遞歸即可簡單的實現。 void Mirror(Node* root) { if (root == NULL) return;

原创 二叉樹

二叉樹的基本操作:http://blog.csdn.net/weixin_35140291/article/details/75905527 二叉樹的非遞歸遍歷:http://blog.csdn.net/weixin_351402

原创 交換排序——快速排序

void QuickSort(int *arr, int begin, int end) { assert(arr); int div = PartSort1(arr, begin, end); if

原创 二叉樹的非遞歸遍歷

二叉樹遞歸遍歷的時候,將其分爲根、左子樹、右子樹三個部分。 其非遞歸遍歷,也是分爲三個部分,通過數據結構“棧”的入棧出棧操作以及其先入後出的特性,實現其遍歷。 template<class T> struct BinaryTre

原创 複雜鏈表的複製

複雜鏈表:除了有一個指向下一個節點的next指針外,還有一個指向隨機節點的random指針 typedef int DataType; typedef struct ComplexNode{ DataType _da

原创 時間複雜度爲O(n)的排序

對數組a進行排序,要求時間複雜度爲O(N) 以空間換時間,新建一個數組b,這裏假設arr中最大的數字不超過100,b數組全部初始化爲0; 例如arr中有數據12,則在b中對應的下標位置+1 void SortN(int* arr, in