原创 希爾排序(ShellSort)

時間複雜度O(n^1.25)~O(1.6n^1.25) 空間複雜度:O(1) #include<iostream> using namespace std; void ShellSort(int *arr, int size

原创 廣義表

GeneralList.h #pragma once #include<iostream> using namespace std; enum NodeType { Head_Type, //頭結點 Val

原创 I/O多路複用之select/poll/epoll

1、基本概念   IO多路複用是指內核一旦發現進程指定的一個或者多個IO條件準備讀取,它就通知該進程。IO多路複用適用如下場合:   (1)當客戶處理多個描述字時(一般是交互式輸入和網絡套接口),必須使用I/O複用。   (2)當一個

原创 二叉搜索樹及判斷一棵樹是否平衡

二叉搜索樹的特點: 1. 每個節點都有一個作爲搜索依據的關鍵碼(key),所有節點的關鍵碼互不相同。 2. 左子樹上所有節點的關鍵碼(key)都小於根節點的關鍵碼(key)。 3. 右子樹上所有節點的關鍵碼(

原创 WebBench-1.5源碼剖析

Web網站壓力測試工具Webbench: Webbench是Linux下的一個網站壓力測試工具,最多可以模擬3萬個併發連接去測試網站的負載能力. 它是由Lionbridge公司開發。 Webbech

原创 將搜索二叉樹轉換成有序的雙向鏈表

根據搜索二叉樹的性質:中序遍歷是有序的,因此中序遍歷搜索二叉樹,將left相當於prev指向前一個小的數,right相當於next指向後一個較大的數。 遞歸實現 Node* TurnToList_R() //搜索樹轉換爲有序的雙向鏈表

原创 二叉樹相關題

題目:在二叉樹中找到一個節點中序遍歷的下一個節點 1、有父指針。分兩種情況 Node* FindNextNode(Node* node) { if (_root == NULL || node == NULL)

原创 求兩個節點的最近公共祖先節點

分三種情況 1、搜索二叉樹,根據搜索二叉樹的性質,左子樹的所有節點比根節點小,右子樹的所有節點比跟節點大。 如果兩個節點都比根節點小,則遞歸左子樹 如果兩個節點都比跟節點大,則遞歸右子樹 否則,兩個節點一個在左子樹,一個在右子樹,

原创 2017校招筆試題

題目:輸入一個字符串從左到右遍歷,如果遇到三個連續相同的子串就將這個子串刪除,並將原串剩下的部分拼接到一起,重複上述過程,直到字符串中沒有可以刪除的子串。 eg: 輸入:AAABCCDDDCB AABBBAB

原创 二叉樹的子樹

題目:有兩個二叉樹,判斷第二個樹是不是第一個樹的子樹,即第二個樹是不是第一個樹的一部分。如圖所示:紅色標記中的部分就是第二棵樹。 #include<iostream> using namespace std; struct Tree

原创 求一個數的x次方

思路:分幾種情況 1、不合法的輸入,基數等於0並且指數小於0。 2、任何一個數的0次方都等於1。 3、指數是負數,可以先對指數求絕對值,然後計算出次方的結果之後再取倒數。 4、遞歸求次方效率更高,時間複雜度爲O(lgn)。 根據

原创 合併兩個有序數組

題目:有兩個排序的數組arr1和arr2,內存在arr1的末尾有足夠的空餘空間容納arr2,實現一個函數,把arr2中的所有數字插入到arr1中,並且所有的數字是排序的 思路:從後向前合併 #include<iostream> usin

原创 調整數組的順序

題目:實現一個函數使所有奇數位於數組的前半部分,偶數在數組的後半部分。 思路:使用兩個指針begin ,end,begin指向數組的的第一個數,end指向數組的最後一個數。當(begin <= end )時,如果begin指向的數是奇數

原创 輸出1到最大的n位數

題目:輸入數字n,按順序打印出從1到最大的n位十進制數。 eg:輸入3,輸出1 2 3 一直到999。 **思路:**n有可能是一個很大的數,要考慮到大數問題。用數組或字符串表達大數。用字符串表示數字的時候,最直觀的方法就是字符串裏每

原创 並查集(求朋友圈的個數)

有如下題目: 已知有n個人和m對好友關係(存於數組r)。如果兩個人是直接或間接的好友(好友的好友的好友…),則認爲他們屬於同一個朋友圈,請寫程序求出這n個人裏一共有多少個朋友圈。 假如:n = 5 , m = 3