原创 C++內斂函數,auto關鍵字及範圍for

內斂函數 函數想必大家熟悉的不能再熟悉了,那我們先來看看這個函數 #include<iostream> using namespace std; int add(int a,int b) { return a + b; } in

原创 C++缺省參數和函數重載

缺省參數 缺省參數感念 缺省參數是聲明或定義函數時爲函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則採用該默認值,否則使用指定的實參比如 #include<iostream> using namespace std;

原创 C++入門 命名空間&輸入輸出

什麼是C ++ 通過學習我們知道C語言是結構化和模塊化的語言,適合處理較小規模的程序。對於複雜的問題,規模較大的程序,需要高度 的抽象和建模時,C語言則不合適。爲了解決軟件危機, 20世紀80年代, 計算機界提出了OOP(obje

原创 快速排序優化——三數取中法

快速排序優化 前面的三篇文章中,爲大家介紹了快速排序的三種劃分方法。那麼,這裏我們想一想,快速排序是否也會有效率低的情況呢?答案是肯定的,快速排序對於數據是敏感的,如果這個數列是非常無序,雜亂無章的,那麼快速排序的效率是非常高的,

原创 快速排序(霍爾劃分)

快速排序 大家看到快速排序,想必都會覺得此類排序方法很快吧。的確,該種算法排序效率比較高。那麼,什麼是快速排序呢? 在快速排序中,選擇一個基準值,後,遍歷這個數列,通過一定的劃分算法,將基準值放到合適的位置,若是升序排序,則基準值

原创 快速排序(挖坑法)

上一篇的內容中,已經介紹過快速排序中的一種霍爾劃分的算法,這篇我們來看看第二種快速排序的劃分方法——挖坑法 挖坑法劃分 例如還是上一篇文章中的無序數列,我們依舊是選擇一個基準值,仍然通過begin和end指針來操作 首先,我們仍

原创 快速排序(前後指針法)

之前的兩篇中,爲大家介紹了霍爾劃分和挖坑法劃分,這一篇,我們來看看第三種劃分方法——前後指針法。 前後指針法 顧名思義,需要兩個指針,一個在前一個在後,分別用cur表示前指針,prev表示後指針(這裏的指針的意思是待排序數列的下標

原创 直接插入排序及希爾排序

直接插入排序 對於直接插入排序,是指一組無需數列,默認第一個數是有序的,從其餘無序的數列中依次選擇數值,插入到有序的數列中去,直到整個數列全部有序。比如下圖 算法思想: 默認1是有序的,則對於後面3,2,5,4,7,6是無序的。

原创 數據結構——堆以及堆排序

堆 上一篇介紹了二叉樹,這一片我們來看堆。首先什麼是堆?其實堆也是一種二叉樹,只不過是一種特殊的二叉樹。堆分爲大根堆和小根堆。大根堆就是根節點的值是最大的,且他的兩個孩子節點也是一個大根堆,以此類推。比如下圖 根節點是100,比

原创 隊列——循環隊列

循環隊列是一個大小確定的特殊隊列,它的特殊體現在循環,之前提到的普通隊列,我們是用鏈表來實現的,在這裏,由於循環隊列是一個長度確定的隊列,所以我們可以拿順序表來實現。循環隊列的操作與普通隊列類似,不過不同的地方在於當rear走到c

原创 文件操作解析

C語言中,文件的操作也是非常重要的,今天我們來學習一下文件的基礎知識 我們先要知道,什麼是文件? 磁盤上的文件是文件,但在程序設計中我們一般談及到的文件有兩種:程序文件和數據文件 程序文件:包括源程序文件(後綴爲.c),目標文件(

原创 自定義類型之結構體,枚舉,聯合體的那些事

結構體 結構體是一個用的最廣的自定義類型其可以表示如下 struct TEST{ char a; short b; int c; double d; }; 但是需要注意的是不能包含自己類型的結構體變量,但是可以包含自己類

原创 字符串相關函數及自我實現

strlen 這個函數是求字符串長度的函數,遇到’\0’即停止,返回的類型一個正整數。其傳參樣式爲strlen(str)意思爲求字符串str的長度並且返回。自我實現也比較好實現,函數部分代碼如下 int My_Strlen(con

原创 sizeof和strlen的那些事

說明 C語言中指針和數組時兩個互不相干的概念,因爲設計的原因C語言中的數組很多時候都可以隱式轉換成指針,這就造成一些初學者對這些產生誤解,因爲C語言是一門弱語言所以今天我們就來看看這些情況下該如何去理解 char arr[] =

原创 內存的祕密

** 內存: ** 計算機中的一個重要組成部分 馮諾依曼體系結構 如何讓理解內存: 想像成一個大走廊,走廊上有很多的房間,每個房間大小是1個字節 每個房間都有一個門牌號(從0開始,依次遞增)稱爲”地址“ 指針一個專門用於保存地址的