原创 二叉樹

二叉樹的定義:二叉樹是每個結點最多有兩個子樹的樹結構。性質:1、在二叉樹的第i層上至多有2^i-1個節點。(i>=1)          2、深度爲k的二叉樹至多有(2^k)-1個節點。(k>=1)          3、具有n個節點的完全

原创 鏈表

鏈表和數組的區別:鏈表:動態內存分配,用多少分配多少,方便插入刪除數據,根據next指針找到下一個元素。對於訪問數據,需要從頭到尾遍歷整個鏈表,知道找到需要訪問的數據,添加、刪除時不用移動節點,直接在指定位置插入、刪除。數組:需要分配一塊連

原创 線索化二叉樹

      二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞歸或者用棧輔助實現非遞歸的遍歷。用二叉樹作爲存儲結構時,取到一個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。     爲了保存這種在遍歷中需要

原创 二叉搜索樹

     二叉查找樹(Binary Search Tree),也稱有序二叉樹(ordered binary tree),排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:1、每一個節點都有一個作爲搜索

原创 常見的排序算法

   排序是計算機內經常進行的一種操作,其目的是將一組“無序”的記錄序列調整爲“有序”的記錄序。       常見的排序算法:冒泡、快排、插入、希爾、選擇、堆排、歸併。1、冒泡排序原理:一個無序數組,按照升序排列。int i 代表循環的次數

原创 實習心得體會

    大三下學期了,我的大學生涯已經過去了一多半了,我不打算考研,我感覺工作更有意思(當然每個人的想法都是不一樣滴),我可能比較幸運吧提前找到了實習,有機會可以在公司跟着大佬們學習。   剛來公司的時候什麼都不熟悉,就是一好奇寶寶,hr×

原创 二叉樹

二叉樹的定義:二叉樹是每個結點最多有兩個子樹的樹結構。性質:1、在二叉樹的第i層上至多有2^i-1個節點。(i>=1)          2、深度爲k的二叉樹至多有(2^k)-1個節點。(k>=1)          3、具有n個節點的完全

原创 AVL樹

1、AVL樹:AVL樹又稱爲高度平衡的二叉搜索樹,是1962年有俄羅斯的數學家G.M.Adel'son-Vel'skii和E.M.Landis提出來的。它能保持二叉樹的高度平衡,儘量降低二叉樹的高度,減少樹的平均搜索長度。2、AVL樹的性質

原创 智能指針的原理及其應用

所謂智能指針就是自動化管理指針所指向的動態資源的釋放。那麼智能指針的引用是爲了解決哪些問題呢?代碼中經常會忘掉釋放動態開闢的資源,引用智能指針可用於動態資源管理,資源分配即初始化,定義一個類來封裝資源的分配和釋放,在構造函數中完成資源的分配

原创 單例模式

單例模式單例模式也叫單件模式,在單例模式中,構造函數應該在private中,限制只能在類內創建對象。1. 單例類保證全局只有一個唯一實例對象。2. 單例類提供獲取這個唯一實例的接口。實現單例模式的思路:一個類能返回對象一個引用(永遠是一個)

原创 多態

c++多態分爲靜態多態和動態多態。1、靜態多態:靜態多態實現的方式是重載,而重載實現的機制是函數的重命名,與類型函數名是有關係的,達到重名名就達到了重載的效果。2、動態多態:(一個接口的多種實現)多態實現的前提是有子類、父類,有繼承關係;要

原创 棧跟隊列

棧跟隊列的區別:棧:先進後出,限定只能在表的一端進行插入和刪除(表尾),棧只能從頭部取出數據,也就是最先放入的需要遍歷整個棧最後才能取出,而且遍歷時還得爲數據開闢臨時空間。隊列:先進先出,只能在表的一端進行插入,並且在表的一端進行刪除,遍歷

原创 二進制中1的個數

這是一個經典的面試題,我們想知道一個二進制中1的個數,首先我們應該判斷整數二進制表中最右邊的一位是不是1,接着把輸入的整數右移一位,此時原來處於右邊倒數第二爲被移到最右邊了,再判斷是不是1,。這樣每次移動一位,直到整個整數變成0爲止。我們可

原创 輸出一個數二進制的所有位及奇偶位

首先我們看一下輸出一個整數二進制的所有位。如果要輸出它的所有位,從最高位開始每次移動i個長度,並且每一位都與1。代碼:#include <stdio.h> int main() { int num = 9; int i; for (

原创 C語言之字符串長度和字符串反轉

 今天我想分享的是有關字符串的一寫內容,我們就先從最簡單的開始吧。main函數中定義一個字符串變量,我們想知道字符串的長度。字符串的長度通常是指字符串中包含字符的數目,我們可以通過調用庫函數得到,我們也可以通過自己編寫一個代碼來實現它。