原创 堆 (heap)

堆是一棵特殊的完全二叉樹,由於這個特性,它的底層採用數組儲存數據,這樣,我們通過一個數組以及一組 heap 算法就可以輕易地實現一個堆。 完整實現代碼 概述 根據數組的特點,我們使用一個技巧。如果將 #i 處的元素看作根,

原创 冒泡排序

概述 冒泡排序 (bubble_sort) 是計算機領域最經典的一種排序算法,它重複走訪要排序的序列,每次比較相鄰的兩個元素,若次序錯誤就交換它們,直到整個序列有序。 由於冒泡排序每趟通過交換可以將最大(小)元素換至尾端,類似水

原创 list

本篇將介紹 STL 中 list 的使用及實現原理 list是一種序列式容器,它採用鏈式結構,其中的元素採用節點方式儲存,每個節點獨佔“一塊”內存,它對於空間的運用有絕對的精準,一點也不會浪費。爲什麼呢?如下: 完整實現

原创 【Linux命令】:ps

簡介 ps 命令是最基本也是非常強大的進程查看命令,使用ps 命令可以查看系統當前進程的詳細信息,這些信息包括但不限於進程的所述用戶名、進程id、父進程id、cpu佔用率、內存佔用率、進程狀態等等。 用法 使用權限:所有用戶 使

原创 進程控制塊(PCB) —— task_struct

我們把正在執行的程序稱爲進程,這是一種廣義的定義。更具體一點來說,進程是由正文端 (text) 、用戶數據段 (usr segment) 以及系統數據段 (system segment)共同組成的一個程序執行環境。 進程和程序

原创 隊列 (queue)

完整實現代碼 概述 隊列是一種先進先出 (FIFO) 的數據結構,它允許在一端插入數據,在另一端刪除數據。最先進入隊列的數據最先出隊列。除此之外,隊列還允許訪問隊頭元素和隊尾元素、獲取隊列長度和判斷空列隊等操作。 隊列不提

原创 棧 (stack)

stack 是一種後進先出 ( LIFO ) 的數據結構,它對外只開放一個叫做棧頂的口,數據從棧頂入,也從棧頂出,也不允許有遍歷的行爲。 完整實現代碼 概述 棧是一種運算受限的序列式容器,它的行爲被限定在只能在一端進

原创 紅黑樹 (附 STL 源碼學習註釋)

除了 AVL 樹之外,另一個頗具歷史並被廣泛運用的平衡二叉搜索樹是紅黑樹。同 AVL 樹一樣,紅黑樹的高度也近似爲 O(logN),它是通過給節點標記上兩種不同的顏色 (紅、黑) 來實現此目的的。 模擬實現代碼 概述 紅

原创 C語言概述

整理自網絡 C語言之父 Dennis Ritchie。 C語言是一門通用的計算機語言,廣泛用於系統軟件與應用軟件的開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境

原创 哈希表 (桶)

之前博文提到的平衡二叉搜索樹 (AVL 樹 和 紅黑樹)可以在 O(logN) 的時間複雜度內進行增刪等操作,下面要介紹的哈希表 (hashtable) 在增刪等操作表現更爲出色,時間複雜度爲 O(1)。 完整實現代碼 概

原创 雙端隊列 (deque)

除了我們常見的的 vector 和 list 之外,還有一種序列式容器 deque。它是一種雙向開口的連續線性空間,雙向開口意味着你可以在它的頭部,尾部任意插入元素,連續線性意味着它底層如同 vector 那樣是“連續”的空間。

原创 數據庫概述

數據庫是數據管理的有效技術,是計算機科學的重要分支。隨着時代的發展,今天信息資源已經成爲一種寶貴的財富。從校務管理系統到電子政務、商務系統,這些社會的方方面面都會產生龐大的數據,管理和使用這些數據成爲當今相關從業者必不可少的一

原创 MySQL發展歷史

整理自網絡 MySQL(發音爲”my ess cue el”)是一種開放源代碼的關係型數據庫管理系統,因爲是開放源代碼的,在下載後可以根據自己的需要進行修改。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小

原创 set算法 (交集,並集,差集,對稱差集)

set是以種以紅黑樹作爲底部結構的關聯式容器,它查找的平均時間複雜度可以達到 O(logN)。 模擬實現 set 的代碼 概述 set 是一種關聯式的容器,它的特點是:所有元素依照鍵值大小被排序。 由於 set 內元素有序

原创 大小端模式詳解及其測定

大小端的寓言故事 有關大小端的爭論,最早來自於《格列夫遊記》裏一個有趣的故事: Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。戰爭的原因:大家都知道,吃雞蛋的時候,原始的方法是打破雞蛋較大的一端,可以