Time of Update: 2018-12-03
排序(Sorting)是電腦程式設計中的一個重要而且常用的操作,它的功能是將一個資料元素的任意序列,重新排列成一個按關鍵字有序的序列。下面介紹最為常用的幾種排序演算法,並進行簡單地比較分析以及C語言常式。這些C常式都是筆者在學習和工作中慢慢積累起來的,應該說還是有些用處的。(劉愛貴 / Aiguille.LIU)1、快速排序演算法 快速排序是目前公認的最好排序演算法,是一種基於分治技術的重要排序演算法,演算法時間複雜度為O(nlog2n)。/* quicksort.c */#define
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 預設函數是C++的一個基本特色。預設函數定義比較簡單,也就是說,對於函數的某一個輸入參數或者幾個輸入參數,如果你沒有特定的數值的話,那我們就會用預設的資料進行代替。如果你在調用的過程中使用了自己的資料,那麼預設資料將被我們自己定義的資料覆蓋。下面就是一個預設函數的樣本:int add(int m, int n = 10){return m + n;} 如果調用呢,有什麼區別?2
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 遞迴,相信有過基本C語言經驗的朋友都明白,就是函數自己調用自己。所以,本質上說,它和普通的函數調用沒有什麼區別。今天之所以會把模板類和遞迴聯絡在一起,是因為我們可以用遞迴的方法實現模板的遞迴。閑話不多說,我們先從一個統計函數開始說起。int process(int m){int index = 0;int count = 0;assert(m >= 0);for (; index
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 泛型程式設計其實不難。本質上說,泛型程式設計就是讓通用的演算法應用到所有的資料類型。具體來說,int是我們熟悉的整數類型。那麼一般情況下,如果我們寫一個int整數的排序演算法,應該怎麼寫呢?大家可以自己試試?下面的代碼是我的一個範例;void bubble_sort(int array[], int length){int temp = 0;int outer = 0;int
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 有過C語言編程的朋友大多知道,如果在malloc記憶體之後不及時free掉記憶體,那麼很有可能會造成記憶體泄露的。那麼在C++上面,是不是也存在這樣的問題呢?結果是C++上面同樣也存在記憶體泄露的危險。這個危險就是如果new後面不能delete的話,也會造成記憶體的泄露。還有不清楚的朋友可以看看下面的樣本:class test{int data;public:test(int
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 指標是編程人員的夢魘,對C語言的開發人員是如此,對C++的開發人員也是如此。特別是在C++中,如果不注意處理類中的指標,非常容易出問題。如果朋友們不相信可以看看下面的代碼:class data{int* value;public:data(int num){if(num > 0)value = (int*)malloc(sizeof(int)*
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在算術符重載裡面,“=”重載可能是最經常使用的一種。但是好多人就誤以為在函數中,凡是類出現“=”的地方,那就是調用算術符重載,其實不然。為什麼呢?我們可以看看下面的代碼。首先,我們定義一個基本類:class data{char* value;int number;public:explicit data(int num = 0){if(num){number = num;value =
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 算術符重載是類的有一個特性,但是每個人使用的方法不一樣。用的好,則事半功倍;但是如果不正確的使用,則會後患無窮。 (1) 簡單算術符介紹
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 const是C/C++語言中的關鍵字,但是如果用的好,可以極大地提高代碼的健壯性。一般來說const使用的地方還是蠻多的,但是主要還是下面幾個地方:(1)普通變數的保護;(2)地址空間的保護;(3)類初始變數的聲明和保護;(4)類變數在函數中的保護。const的保護主要來自於編譯器層面,和程式的運行沒有關係。 (1)普通變數的保護const int data = 10;const
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 對於程式設計員來說,makefile是我們繞不過去的一個坎。可能對於習慣Visual
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 編寫代碼過程中少不了調試。在windows下面,我們有visual studio工具。在linux下面呢,實際上除了gdb工具之外,你沒有別的選擇。那麼,怎麼用gdb進行調試呢?我們可以一步一步來試試看。#include <stdio.h>int iterate(int value){ if(1 == value) return 1; return
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 設計模式的書相信很多人都看過。對於設計模式這樣一種方法,相信不同的人有不同的理解。我在這裡寫的部落格只是我個人對設計模式的粗淺認識。文中肯定存在很多的不足和不成熟之處,希望朋友們諒解。望大家多多指正,謝謝!01)C語言和設計模式(繼承、封裝、多態)02)C語言和設計模式(訪問者模式)03)C語言和設計模式(狀態模式)04)C語言和設計模式(命令模式)05)C語言和設計模式(解譯器模式)0
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在Linux系統上面使用的更多的常常是AT&T格式的組合語言。那什麼是AT&T格式的彙編代碼呢?我們可以寫一個試試看。.datamessage: .string "hello!\n"length = . - message.text.global
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在我們編寫軟體的過程當中,少不了需要使用別人的庫函數。因為大家知道,軟體是一個協作的工程。作為個人來講,你不可能一個人完成所有的工作。另外,網路上一些優秀的開源庫已經被業內廣泛接受,我們也沒有必要把時間浪費在這些重複的工作上面。
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在Linux下面,編寫makefile是一件辛苦的事情。因此,為了減輕程式員編寫makefile的負擔,人們發明了autoconf和automake這兩個工具,可以很好地幫我們解決這個問題。 我們可以通過一個簡單的樣本來說明如何使用組態工具。(1)首先,編寫源檔案hello.c。#include <stdio.h>int main(int argc, char**
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在Linux下面,建立進程是一件十分有意思的事情。我們都知道,進程是作業系統下面享有資源的基本單位。那麼,在Linux下面應該怎麼建立進程呢?其實非常簡單,一個fork函數就可以搞定了。但是,我們需要清楚的是子進程與父進程之間除了代碼是共用的之外,堆棧資料和全域資料均是獨立的。#include <unistd.h>#include