原创 單鏈表有環、無環、環的長度

問題:給你一個單鏈表,需要找到一個方法進行判斷是否有環的存在。 雙指針判斷單鏈表是否有環; ​使用兩個slow, fast指針從頭開始掃描鏈表。指針slow 每次走1步,指針fast每次走2步。如果存在環,則指針slow、fast會相遇;

原创 new與delete C++

首先我們來看一下new和delete。 1)在C++中堆內存的分配和釋放是通過new和delete來操作的,new的底層也是通過malloc來開闢內存的,new比malloc多一項功能,就是開闢完內存,還可以進行初始化操作,如下: int

原创 指針的左值與右值

首先我們看一下什麼是左值、右值。 (1)左值就是一個可被存儲的單元,右值就是一個可被讀取的數據。      (2)左值必須是一個被明確了的內存存儲單元,可以用來被賦值;右值必須是一個能被讀出來的確確實實的值,這個值可以是數據,可以是指針,

原创 拷貝構造函數 淺拷貝 深拷貝

構造函數是一個初始化類對象的函數,即使不顯示調用,編譯器也會隱式調用構造函數初始化類對象。同樣的,拷貝構造函數是一種特殊的構造函數,目的也是初始化類對象,同樣在不聲明的情況下也會隱式調用該函數。而隱式調用拷貝構造函數的時候,我們稱之爲“淺

原创 單鏈表的頭插尾插刪除添加

單鏈表:單向鏈表是鏈表的一種,其特點是鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始。鏈式存儲結構的線性表將採用一組任意的存儲單元存放線性表中的數據元素。由於不需要按順序存儲,鏈表在插入、刪除數據元素時比順序存儲要快,但是在

原创 C++模板

c++模板編程可以使你的程序更加的優雅和簡介,在減少了代碼量的優勢下不說,運用得當也可以極高提高運行效率和開發效率。

原创 字符串轉換整數

請你來實現一個 atoi 函數,使其能將字符串轉換成整數。 首先,該函數會根據需要丟棄無用的開頭空格字符,直到尋找到第一個非空格的字符爲止。 當我們尋找到的第一個非空字符爲正或者負號時,則將該符號與之後面儘可能多的連續數字組合起來,作爲該

原创 虛函數 虛函數表

虛函數是面向對象編程函數的一種特定形態,是C++用於實現多態的一種有效機制。C++的多態可以分爲靜態多態和動態多態。函數重載和運算符重載實現的多態屬於靜態多態,而通過虛函數可以實現動態多態。實現函數的動態聯編其本質核心則是虛表指針與虛函數

原创 菱形繼承

菱形繼承就是兩個子類繼承同一個父類,而又有子類同時繼承這兩個子類。 創建一個基類A讓B1和B2公有繼承於它,讓C公有繼承B1和B2。 class A { public : A() :a(1) {

原创 迴文數

迴文數

原创 構造函數的初始化列表

已經有個構造函數負責初始化,爲什麼還需要構造函數初始化表呢? 在以下三種情況下需要使用初始化成員列表: 需要初始化的數據成員是對象的情況; 需要初始化const修飾的類成員; 需要初始化引用成員數據; 引用類型的成員變量必須在構造函數的初

原创 拷貝構造函數

拷貝構造函數是一種特殊的構造函數,它在創建對象時,是使用同一類中之前創建的對象來初始化新創建的對象。拷貝構造函數常用於: 通過使用另一個同類型的對象來初始化新創建的對象; 複製對象把它作爲參數傳遞給函數; 複製對象,並從函數返回這個對象。

原创 圖的定義

圖的定義 圖:圖是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示爲:G (V,E ),其中, G 表示一個圖, V 是圖 G 中頂點的集合, E 是圖 G 中邊的集合。如圖: 對於圖的定義,我們需要明確幾個注意的地方。  線性表中

原创 KMP算法

KMP算法:KMP是由3個外國人想出來的設計的線性時間字符串匹配算法。時間複雜度很低O(n),是判定字串的一個十分簡便的方法。KMP算法在搜索發生失配時,將模式串向右滑動到某個位置重新開始匹配而不是回溯,提高了搜索效率。經過分析,KMP算

原创 查找算法

目錄 折半查找 線性索引查找 折半查找 折半查找又稱爲二分查找,它的前提是記錄的關鍵碼有序,線性表必須採用順序存儲。折半查找的思想是:在有序表中,取中間記錄作爲比較對象,若給定值與中間記錄的關鍵字相等,則查找成功;若給定值小於中間記錄的關