原创 一次使用快慢指針解決鏈表問題的代碼記錄

在LeetCode上刷題時,使用快慢指針處理鏈表翻轉問題,此處記錄一下,以便之後熟悉快慢指針的具體寫法。 #include <iostream> #include <string> using namespace std; /

原创 樹的創建、前序和層序遍歷

1、樹節點的定義方式 2、樹節點的創建 3、樹的前序遍歷 4、樹的層序遍歷 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> #includ

原创 堆的定義與基本操作接口:建堆、插入、刪除、排序(C++實現)

堆的定義: 堆是一顆完全二叉樹,樹中每個節點的值都不小於(或不大於)其左右孩子結點的值。其中,如果父節點的值大於或等於孩子節點的值,則稱之爲大頂堆。如果父節點的值小於或等於孩子節點的值,則稱之爲小頂堆。 堆一般用優先隊列來實現。

原创 使用STL中的優先隊列處理“合併果子”問題

問題描述: 有n堆果子,每堆果子質量已知,現在需要把這些果子合併成一堆,但是每次只能把兩堆果子合併到一起,同時會消耗與兩堆果子質量之和等值的體力。顯然,在進行n-1次合併之後,就只剩下一堆了。爲了儘可能節省體力,請設計出合併的次

原创 DFS: 揹包問題(C++實現)

問題描述:有n件物品,每件物品的重量爲w[i],價值爲c[i]。現在需要選出若干件物品放入一個容量爲V的揹包中,使得在選入揹包的物品重量在不超過容量V的前提下,讓揹包中物品的價值之和最大,求最大價值。(1≤n≤20) 解題思路:深

原创 關於STL中的空間(內存)配置器:allocator

一般我們在使用STL的時候,空間配置器allocator對於我們是隱藏的。它隱藏在容器之後,進行空間內存的分配、管理、釋放等工作。整個STL的操作對象都存放在容器之內,而容器需要配置空間來存放內容,這個時候,空間配置器就派上作用了

原创 二叉樹的基本操作:創建、查找、插入、遍歷、還原二叉樹

1、創建二叉樹的節點(使用指針) 2、二叉樹的查找 3、二叉樹的創建 4、二叉樹的插入操作 5、二叉樹的前序、後序、中序、層序遍歷 6、根據前序遍歷和中序遍歷還原二叉樹 7、根據中序遍歷和後序遍歷還原二叉樹 #define _CR

原创 二叉查找樹的基本操作:建立、查找、刪除、插入(C++實現)

二叉查找樹的定義: (1)要麼二叉查找樹是一顆空樹 (2)要麼二叉查找樹由根節點、左子樹、右子樹組成,其中左子樹和右子樹都是二叉查找樹,且左子樹上所有節點的數據域均小於或等於根節點的數據域,右子樹上所有節點的數據域均大於根節點的

原创 並查集(UnionFind)接口封裝:C++實現

接口的主要內容如下: 1、並查集初始化 2、合併:合併兩棵樹 3、查找:找某一節點所在樹的根節點 4、連通性判斷:判斷兩個節點是否連通,實質是判斷其根節點是否相同 5、路徑壓縮:降低樹的高度,進而降低查找的複雜度 6、連通分量個數

原创 C++:final關鍵字的作用

派生類重寫父類的虛函數,是C++中多態的體現。而final關鍵字爲我們提供了一種控制手段,用來阻止子類重寫自身的虛函數。 這種控制手段一般用於派生類,用來阻止更多的下級子派生類來重寫虛函數。如果在基類(最頂級的父類)中使用的話,此