原创 二叉搜索樹的實現與遍歷(前中後序遍歷)(層序遍歷)(C++)

描述 二叉搜索樹(Binary Search Tree)又稱爲:二叉查找樹、二叉排序樹。它的每個結點的值都大於其左子樹上的所有結點的值,並且小於其右子樹上所有結點的值,就稱爲二叉搜索樹。 二叉搜索樹是一種經典的數據結構,它既有鏈表

原创 二分查找法(循環和遞歸)(C++)

實現代碼 #include<iostream> using namespace std; template<class T> int binarySearch(T arr[], int n, T target) { /

原创 算法與數據結構-隊列應用(打印楊輝三角)(C++)

實現代碼 #include<iostream> #include<queue> using namespace std; void yhTriangle(int n) { queue<int> q; q.push

原创 二分查找法-floor和ceil函數實現(C++)

描述 有時候我們用二分查找法找的不是一個元素而是一段區域。這時候我們就可以設計floor(地板)和ceil(天花板)函數,找到相應區域的起始位置和結束位置。 注意 當我們要找的元素target不在序列中時,令floor指向比

原创 數據結構-利用(循環隊列)和(多線程編程)模擬實現打印作業任務管理

描述 用循環隊列存放需要打印的作業任務,並用多線程的方式分別對臨界區進行添加作業和打印作業。 具體思路 創建臨界區對象和兩個子線程。一個子線程調用的作爲參數的函數用於向隊列中添加作業;另一個子線程則取出隊首任務並打印。 當隊列滿

原创 算法與數據結構-索引堆優化(C++)

描述 如果我們想要在索引堆中修改索引爲i的元素,我們就需要找到索引i(也可以理解爲索引爲i的元素)在堆中的位置,並對其進行維護以保持堆特性。就是我們需要對索引進行遍歷直到indexes[j] == i表示索引i在堆中的位置爲j,並

原创 排序算法練習-希爾排序

介紹 希爾排序(Shell’s Sort)又稱爲“縮小增量排序”(Diminishing Increment Sort),是對直接插入排序的改進版本。是一個非穩定的排序算法。時間複雜度爲O(n1.3)~O(n2)。 算法的時間複雜

原创 算法與數據結構-索引堆(堆排序)(C++)

描述 堆的概念就不多說了。有的時候堆存放的數據比較複雜,直接對堆中的元素進行操作將造成過大的時空開銷,或者我們需要保持堆中數據的原有順序不變。我們就可以用索引堆這種數據結構來解決。 索引堆就是爲堆中的每個元素建立一個索引,當對堆進

原创 數據結構練習-原地堆排序

描述 將需要排序的數組用構造成最大堆的算法進行原地排序。 具體思路 對於傳入的數組arr[0…n-1],從第(n-1-1)/2個元素(即最後一個非葉子結點)開始往前進行堆化,構造成最大堆。 這樣一來arr[0]爲最大元素。設定一

原创 Linux多線程編程-線程創建

要求 編程實現在主進程中通過線程創建pthread_create()函數來創建新的線程。 在主線程和子線程中要通過getpid()及pthread _self()獲取對應的進程號和線程號並打印輸出 實現代碼 #include<st

原创 數據結構練習-堆 (最大堆) (堆排序)

介紹 我們所說的堆這種數據結構,通常指的是二叉堆,二叉堆是一棵完全二叉樹。堆又可以分爲最大堆和最小堆,本文以最大堆爲例介紹堆這種數據結構。 思路 用數組存放堆中的元素,創建一個大小爲n+1的連續空間data[0…n],data

原创 Linux多線程編程-線程間參數傳遞

要求 實現在兩個子線程通過全局變量傳遞數據:即在一個子線程中對全局變量的成員進行賦值,在另一個子線程中對全局變量的成員進行取值並顯示。 體會同一進程的不同線程共享進程所擁有的全部資源的特性。 思路 首先,定義一個全局結構類型和對

原创 Linux多線程編程-子線程的返回(返回簡單數據類型)

引言 通過幾個實驗練習,學習線程之間連接的具體實現。下面列舉了兩個例子,一個是子線程返回簡單數據類型;另一個是子線程返回複雜數據類型。 實現代碼 子線程返回簡單的數據類型 #include<stdio.h> #include<st

原创 Linux多線程編程-子線程的返回(返回複雜數據類型)

引言 通過幾個實驗練習,學習線程之間連接的具體實現。下面列舉了兩個例子,一個是子線程返回簡單數據類型;另一個是子線程返回複雜數據類型。 實現代碼 子線程返回複雜數據類型 #include<stdio.h> #include<pth

原创 數據結構練習-循環隊列

介紹 循環隊列是在順序隊列的基礎上,解決“假溢出”問題的一種數據結構。在邏輯上可以看做一個環,如下圖所示: 思路 分配一個大小爲MAXSIZE的連續空間,初始化q.front = q.rear = 0。 進隊q.base[re