原创 模擬實現strlen的三種方法

在模擬實現strlen之前我們首先要明白strlen的作用: 1.計算字符串s的(unsigned int)型長度 2.返回s的長度不包括"\0",這裏要與sizeof加以區分 實現思路: 1.使用計數器count,每移動一次指針,cou

原创 linux進程(2)之走入進程的內心世界

在上一講了解了進程的基本知識後,我們再次深入瞭解進程,瞭解殭屍進程,孤兒進程,以及進程的優先級問題 Z(zombie)殭屍進程 子進程退出,父進程還在運行,但是父進程沒有讀取子進程的退出狀態,子進程就進入僵死狀態。僵死進程會以終止狀態保存

原创 memset函數實現

memset函數的作用: 以dest爲起始位置的n個字節的內存區域用整數set來進行填充,len爲要填充的字節數,返回值爲目標dest內存的起始地址 特別說明:len表示的是字節數,函數是以字節的形式每次賦值給目標地址 具體實現代碼:

原创 Linux進程概念

馮諾依曼體系結構: 這裏的存儲器指的是內存,在不考慮緩存的情況下,輸入輸出設備只能與內存進行數據寫入或讀取,不能直接與CPU“溝通” 內存可以與任何設備直接進行打交道 操作系統OS(基本的程序集合):是一款純正“搞管理”的軟件 1.內核

原创 模版

函數模板格式: template <class 形參名1, class 形參名2, class 形參名n> 返回類型 函數名(參數列表)  {            ...    } 模板形參的定義既可以使用class,也可以使用type

原创 快速排序

大致思路: 1 . 先從數列中取出一個數作爲基準數。 2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。 3.再對左右區間重複第二步,直到各區間只有一個數。 核心思想:挖坑填數+分治 具體實現: 具體代碼:

原创 圖解希爾排序

希爾排序:不穩定,時間複雜度 平均時間 O(nlogn) 最差時間O(n^s) 1<s<2 具體實現思路如圖: 實現代碼如下: void swap(int *a, int* b) { int tmp; tmp = *a; *a

原创 圖解選擇排序

選擇排序(升序排列):不穩定,時間複雜度 O(n^2) 核心思想就是打擂臺,初始狀態我們默認選擇第一個元素作爲擂主,讓它依次與其他元素比較,如果小於它,那麼swap兩個元素,依次類推,最後的元素就是按從小到大排列。 具體實現步驟如圖:

原创 進程創建之fork與vfork

虛擬地址與物理地址的映射關係(藉助頁表) 由圖中的映射關係我們可以發現,虛擬地址與物理地址並不是一一對應的,這樣也就會出現一種問題,一個變量地址相同內容不同,其實是虛擬地址相同,所對應的物理地址不同的原因 那麼是誰管理着虛擬地址空間呢?

原创 軟件測試基礎

軟件測試的生命週期 需求分析-->測試計劃-->測試設計、測試開發-->測試執行-->測試評估 具體內容: 需求階段:瞭解需求、對需求進行分解得出測試需求 計劃階段:編寫測試計劃、方案 設計階段:搭建測試用例框架、根據需求和設計編寫一部分

原创 模擬實現strcpy

strcpy函數的作用:把從src地址開始且含有‘\0’結束符的字符串複製到以dest開始的地址空間,返回值的類型爲char *。 實現思路:用while循環將src中的字符一個個賦值給dest,兩個指針++ 具體實現代碼: #incl

原创 圖解插入排序

插入排序(升序):穩定,時間複雜度 O(n^2) 具體實現思路如圖: 具體實現代碼如下: void InsertSort(int *a ,int len) { if (len <= 1) { return; } int c

原创 查找單鏈表倒數第K個結點

在這裏我們介紹一種簡單的思路: 定義兩個指針(fast和slow)都指向頭結點,fast指針先走K-1次後slow指針再走,當fast->next==NULL的時候,slow指針指向的位置就是我們所要找的倒數第K個節點 爲了便於理解我們畫

原创 memcpy函數實現

memcpy函數作用: 將由src指向地址爲起始地址的連續n個字節的數據複製到以dest指向地址爲起始地址的空間內,函數返回一個指向dest的指針 特別說明: 1.src和dest所指內存區域不能重疊 2.與strcpy相比,memcpy

原创 命名管道的理解與用法

命名管道的創建: int mkfifo(const char*pathname,mode_t mode); pathname創建管道的名字,mode給的權限,權限依然收到umask影響 mkfifo創建命名管道文件,文件的大小永遠爲0,表