原创 利用棧解決括號匹配和逆波蘭表達式

當我們學習了棧這種數據結構滯後,我們就可以利用棧來解決一些實際問題。 這裏是我們給出的動態順序棧的實現 template< class T> class Stack { public: Stack() :_array(new T[3

原创 Linux下進程的控制

linux下進程的控制 進程的創建 首先,我們知道進程的創建需要調用fork()函數。 fork()一次調用兩次返回,子進程返回0,父進程返回子進程的pid。 同樣也可以調用vfork來創建子進程,但此時父子進程共享地址空間,因

原创 通用冒泡排序算法

       通常的冒泡排序算法只能解決指定類型的數據以及固定的升序或者降序排列,而當我們學習了C++模板以及仿函數的之後,我們就可以寫一個通用的冒泡算法來處理不同類型數據以及想要排序的方式。 void bubblesort(int* a

原创 排序【3】交換排序

冒泡排序 基本思想:爲什麼叫冒泡排序呢,,是因爲每一次排序就像是魚兒吐泡泡,一個個泡泡從水底到水面會變得越來越大,泡泡就像元素,隨着算法的進行,較大的元素就會到後面去。如果升序排列,那麼就會對相鄰兩個元素進行比較,如果前者大於後者

原创 搜索結構之AVL樹

AVL樹 概念 搜索二叉樹雖然降低了查找的效率,但是如果數據有序或者接近有序,那麼搜索二叉樹就會退化成單枝樹,搜索的時間複雜度就會變成O(n),極大的降低了效率,因此我們引入了AVL樹,在向樹中插入元素的時候,能保證每一個節點的

原创 智能指針與弱指針解決循環引用

       當我們學會使用智能指針的時候,會發現他有很多好處,但庫裏面提供的智能指針shared_ptr也並不是萬能的,他會存在循環引用的問題,下面我們就通過實例來具體分析循環引用這種情況。 struct Node { Node(

原创 排序【2】選擇排序

選擇排序 算法思想:以升序爲例,在整個區間中找出排序碼最小的元素,如果這個元素不是這組序列中的第一個元素,那麼將它和第一個元素進行交換,使得最小的元素就在第一個位置,然後縮小區間,循環執行上述操作,只到區間中只剩下一個元素。 具

原创 我的第一個Linux小程序----進度條

今天給大家展示一個在Linux下編寫的小程序----進度條 #include<stdio.h> #include<unistd.h> int main() { char array[101]="#"; int i=0; char* bu

原创 排序【1】插入排序

常見排序 在實際生活中,排序的運用很多,排序就是將一組雜亂無章的數據升序或者降序排成有序的序列。常見的排序算法有。 不同的排序算法適用於不同的場景下,衡量一個排序算法的標準不僅有空間複雜度,空間複雜度,還有穩定性。一個穩定的排序

原创 巧用棧結構實現迷宮遊戲

    當我們學習了棧這種數據結構以後,我們就可以利用棧來實現一個簡單的迷宮遊戲 ,首先我們給出迷宮的地圖,這是一個二維數組。  {0,0,1,0,0,0,0,0,0,0},  {0,0,1,1,1,1,1,0,0,0},  {0,0,0

原创 初識Makefile

1.爲什麼需要Makefile?        在LInux下,一個工程中的源文件不計其數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,

原创 Linux下的進程信號

信號 什麼是信號? 在生活中,我們可以看到交通信號,火警信號,急救信號,這些都是信號,通知我們做出相應的反映,在操作系統中,我們也有信號這一個機制,來確保進程的合理運行,當一個程序運行起來的時候,我們在鍵盤上按一個ctrl+

原创 基於鏈表和環形隊列的生產者消費者模型

生產者,消費者模型 在學習系統編程當中,有一種很重要的模型,那就是生產者消費者模型,在編寫多線程代碼時候,一個個線程就扮演着生產者,消費者的角色。舉一個例子,在生活中,我們去商店買東西,那麼我們相當於消費者,而貨物生成廠家就是生產

原创 Linux下基礎I/O

Lin9ux下的基礎I/O C語言階段 在學習C語言的時候,我們要實現程序的I/O操作,需要調用fopen()和fclose來打開和關閉文件,fopen()成功返回FILE*的文件指針, 利用fread和fwrite函數來進行文

原创 Linux下的進程間關係

進程組 在linux中,每一個進程還屬於一個進程組,一個進程組有多個進程組成,通常,他們聯合起來作業,可以接受從同一個終端下的各種信號。並且每一個進程組都有一個進程組ID。在Linux中叫做PGID,一個進程組由多個進程組成,進