原创 從零開始學習c++之一

慣例第一步:寫一個HelloWorld程序 使用的IDE是Visual Studio 2017 #include <iostream> using namespace std; int Main() { cout << "He

原创 簡單泊車管理系統-c++實現

泊車系統 該系統要求對一個文件中所存儲的汽車數據進行各種常規操作,如:查找、計費、顯示等功能。目的是熟練掌握文件、數組的各種操作,以及一些算法思想的應用,實現一個簡單的泊車管理系統。#include <iostream> #includ

原创 無向圖的深度優先搜索與廣度優先搜索

圖的簡述: 圖是一種複雜的數據結構,圖(Graph)是由頂點(Vertex)組成的非空有窮集合和頂點之間的邊(Edge)組成。 圖的邊可以由權值(weight),也可以沒有,有權值的圖稱爲網圖。 圖的邊也可以有方向,沒有方向的爲無向圖,有

原创 從零開始學習c++之運算符重載與類型轉換

運算符重載: 什麼是運算符重載: 重載的運算符是特殊名字的函數,名字由operator關鍵字加上要重載的運算符組成,如operator+,和其他函數一樣,重載的運算符也包含返回類型、參數列表和函數體。 運算符重載的使用細節: (1)當一

原创 排序算法之歸併排序的遞歸與迭代實現方法

歸併排序簡述: 歸併排序是排序算法的一種新的思路,旨在把兩個或以上有序的數列歸併一個有序的數列,是爲歸併。 假如有一個含有n個元素的數組,將其看作n個有序列,然後兩兩歸併,最終得到一個有序列。 排序前的準備: #define MAXSIZ

原创 從零開始學習c++之函數模板與類模板

什麼是模板: 模板是c++中泛型編程的基礎,一個模板就是一個創建類或函數的藍圖或者說是公式,當使用一個vector這樣的泛型類型或者find這樣的泛型函數時,我們提供足夠的信息,將藍圖轉換爲特定的類或者函數 函數模板: 定義模板: 假如

原创 排序算法之希爾排序和堆排序

希爾排序簡述: 希爾排序可以看作是直接插入排序的一種優化,即把一個數插入一個有序表,不過希爾排序多了一個默認的增量,把一個序列分成若干個增量大小的增量序列,然後在子序列直接進行直接插入排序,每次都使較小的數排到靠前的子序列裏面,增量不斷減

原创 從零開始學習c++之初識指針和引用

指針: 指針(pointer) 是一個值爲內存地址的變量   內存地址一般使用16進製表示比如0028FF44 指針的本質只是一個變量,指針大小爲4個字節 指針的聲明: //第一種聲明方式 int* ptr_i1;

原创 0/1揹包問題與矩陣乘法鏈(動態規劃)

何爲0/1揹包問題: 0/1揹包爲一種特殊的揹包問題,一個固定容量C的揹包要裝N種物品,每種物品只有一個,每種物品重量和價值都不相同,且只能選擇裝進去或者不裝進去(即選擇0或者1,無法只裝一部分),要使揹包中的物品價值最大,此爲0/1揹包

原创 從零開始學習c++之一維、二維數組和vector的簡單使用

數組: C++中的數組和C中一樣,數組大小不可更改,必須聲明時確定數組大小,只有在初始化時才能一次性賦值,後續賦值只能按索引單個元素賦值; 數組雖然不夠靈活,但效率很高,對於特定情況作用很大。 下面是數組的幾種可行聲明和初始化:

原创 最短路徑簡單實現(Dijkastra算法和Floyd算法)

什麼是最短路徑: 圖中的某一個節點到另外某一個節點的最短路徑的權值和,如果是無權值的圖,則理解爲權值爲1的圖。 圖的鄰接矩陣結構: 要計算最短路徑,首先需要一個圖,這裏用鄰接矩陣來表示一個圖。 typedef char VertexTyp

原创 從零開始學習c++之拷貝構造函數

拷貝構造函數: 定義:    如果一個構造函數的第一個參數是自身類類型的引用,且任何額外參數都有默認值,則此構造函數是拷貝構造函數。 典型的拷貝構造函數: class Foo{ public: Foo(){}; //

原创 二叉搜索樹的簡單操作與實現

二叉搜索樹(BinarySearchTree)性質   二叉搜索樹首先是一棵二叉樹,二叉樹可能爲空,而一顆非空的二叉搜索樹要滿足以下條件:   (1)每個元素有一個關鍵字,所有關鍵字是唯一的。(關鍵字不唯一的二叉搜索樹叫有重複值的二叉搜索

原创 圖的應用之拓撲排序實現(輔助棧)

何爲拓撲排序: 一般常見的圖是有環的,不需要考慮頂點的先後順序,而比如在一些工程中,工程的流程圖就需要考慮頂點的先後順序,比如B的前置條件是完成A,這就需要拓撲排序來判斷圖是否滿足拓撲次序,並且能夠形象的顯示各個頂點的先後順序。 拓撲排序

原创 從零開始學習c++之選擇循環結構、運算符、初始vector

選擇結構://if條件結構:int a = 0;int b = 0;cout << "Enter two number" << endl;cin >> a >> b;if (a > b)cout << "