原创 單鏈表及相關面試題

//SlistNode.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <Windo

原创 單鏈表(無頭節點)的實現

鏈表:鏈表是一種順序表,但並不是順序存儲,每個節點都存儲着一個指向下一個節點的指針,把存儲的數據元素連接起來 //SlistNode.h #pragma once #define _CRT_SECURE_NO_WARNINGS

原创 迭代器(list迭代器的實現)

其實一種循環結構就是一種迭代操作。 在STL中,容器的迭代器被作爲容器元素對象或者I/O流中的對象的位置指示器,因此可以把它理解爲面向對象的指針–一種泛型指針或通用指針。不依賴於元素的真實類型。迭代器是爲了降低容器和泛型算法至今

原创 信號集與阻塞信號

linux常見的信號 信號是一種軟件中斷,是一種處理進程間異步的通信機制。信號可以導致一個正在運行的進程被另一個異步進程中斷,轉而處理某一個突發事件。 常見的信號 kill -l 命令查看 1) SIGHUP 2) SIG

原创 Linux權限管理

文件的訪問者分爲: 1.文件和文件目錄的所有者:u–user 2.文件和文件目錄的所有者所在的組的用戶:g–group 3.其它用戶:o–others 文件的訪問權限的種類 1.讀(r/4):具有讀取文件內容的權限。對目

原创 並查集

引出: 一些應用問題中,需要將n個不同的元素劃分成一組不想交的集合。開始時,每個元素自成一個單元素集合,然後按一定規律將歸於同一組的元素合併。還可以查詢這個 元素是否在這個集合中,描述這種數據類型就稱爲並查集。 假設一個集合s

原创 菱形虛擬繼承

菱形繼承 對於菱形繼承簡單的代碼實現: #include <iostream> #include <string> using namespace std; class Person { public: str

原创 Linux下的三個重要時間

Change time(ctime):一個文件或目錄的更改時間。是指文件的屬性或者權限發生變化更新的時間。 Access time(atime):最後訪問的時間。指文件被讀取更新的時間。 Modify time(mtime):

原创 劍指offer-用兩個棧實現一個隊列

棧是先進後出,隊列是先進先出 實現: 1.實現push:將元素都push到一個棧中。 2.當是stack1不爲空時,將stack1取它的top元素push到stack2中,相對與入stack1的順序相反,在stack2中po

原创 STL中map-set的使用

map:是一種key/value的模板類(容器),它的底層是實現是紅黑樹。 map中它將key/value封裝成了一個結構體。 template<class K,class V> struct pair { K firs

原创 小項目-文件壓縮(哈夫曼樹)

先回顧一下哈夫曼樹 huffman樹即最優二叉樹,是加權路徑長度最短的二叉樹。哈夫曼樹的樹使用貪心算法。 每次選擇該集合中權值最小的兩個作爲葉子結點,父親節點的權值爲葉子節點權值之和。然後又將其父親重新放進此集合裏。重複前

原创 大數據問題(九章算法)

這些問題都面臨着一個內存不夠用的問題。 1.給一個超過100G大小的 log file,log中存着IP地址,設計算法找出出現次數最多的IP地址? 由於超過100G,那必須對文件進行切分。 (1)切分,可以切成100份,每份

原创 智能指針剖析

介紹智能指針之前,先說明什麼叫RAII RAII:資源分配即初始化。定義一個類來封裝資源的分配和釋放,這個類在構造函數完成資源的分配和初始化,在析構函數完成資源的清理,保證資源的正確初始化和及時釋放。 而智能指針就是來實現這樣

原创 快速排序

快速排序算法是一種劃分交換的方法,它採用分治法進行排序。 基本思想:取元素序列的某個元素作爲基準,將序列劃分成左右兩個子序列,比這個元素大的或小的放到左邊,相對小的或大的放右邊,該基準元素則放到中間。然後對此子序列重複上面的方法

原创 對稱矩陣與稀疏矩陣(轉置)

對稱矩陣:n*n的方陣,對於矩陣的任意元素,aij=aji時(i和j都大於等於0小於n) 因爲該矩陣的上三角和下三角的數據相同,爲了節省空間,我們可以只存儲下三角或上三角的元素,這種存儲方式稱爲矩陣的壓縮 矩陣壓縮後的結構