Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 看過我前面部落格的朋友都清楚,函數調用主要依靠ebp和esp的堆棧互動來實現的。那麼遞迴呢,最主要的特色就是函數自己調用自己。如果一個函數調用的是自己本身,那麼這個函數就是遞迴函式。 我們可以看一下普通函數的調用怎麼樣的。試想如果函數A調用了函數B,函數B又調用了函數C,那麼在堆棧中的資料是怎麼儲存的呢?函數A ^函數B | (地址遞減)函數C |
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 記憶體是程式啟動並執行基礎。所有正在啟動並執行代碼都儲存在記憶體裡面。記憶體需要處理各種各樣的資料,包括鍵盤的資料、滑鼠的資料、usb的資料、串口的資料、網路攝影機的資料,那麼這些資料經過程式的處理之後,就要進行輸出到串口、螢幕、usb等。
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 無論是資料庫,還是普通的ERP系統,尋找功能資料處理的一個準系統。資料尋找並不複雜,但是如何?資料又快又好地尋找呢?前人在實踐中積累的一些方法,值得我們好好學些一下。我們假定尋找的資料唯一存在,數組中沒有重複的資料存在。 (1) 普通的資料尋找
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在上面一篇部落格當中,我們發現普通尋找和排序尋找的效能差別很大。作為一個100萬的資料,如果使用普通的尋找方法,那麼每一個資料尋找平均下來就要幾十萬次,那麼二分法的尋找呢,20多次就可以搞定。這中間的差別是非常明顯的。既然排序有這麼好的效果,那麼這篇部落格中,我們就對排序算做一個總結。 按照我個人的理解,排序可以分為兩種:一種是非遞迴排序,它主要按照非遞迴的方法對資料進行排序,
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前面一篇部落格提到的快速排序是排序演算法中的一種經典演算法。和快速排序一樣,合并排序是另外一種經常使用的排序演算法。那麼合并排序演算法有什麼不同呢?關鍵之處就體現在這個合并上面。 合并演算法的基本步驟如下所示: 1)把0~length-1的數組分成左數組和右數組 2)對左數組和右數組進行迭代排序 3)將左數組和右數組進行合并,那麼產生的整個數組就是有序的資料數組
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 堆排序是另外一種常用的遞迴排序。因為堆排序有著優秀的排序效能,所以在軟體設計中也經常使用。堆排序有著屬於自己的特殊性質,和二叉平衡樹基本是一致的。打一個比方說,處於大堆中的每一個資料都必須滿足這樣一個特性: (1)每一個array[n] 不小於array[2*n] (2)每一個array[n]不小於array[2 * n + 1]
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 我們知道,在記憶體中的空間都是連續的。也就是說,0x00000001下面的地址必然是0x00000002。所以,空間上是不會出現地址的突變的。那什麼資料結構類型是連續內部空間呢,其實就是數組,當然也可以是堆。數組有很多優勢,它可以在一段連續空間內儲存相同類型的資料,並且對這些資料進行管理。所以從這個意義上說,掌握了數組才能說明你資料結構入門了。
Time of Update: 2018-12-03
介紹幾個小演算法:數制轉換、資料交換、最大公約數、N次方快速演算法、KMP演算法。這幾個演算法在相關資料結構和演算法書上都有介紹,這裡給出C語言實現例子,供大家參考。(劉愛貴 / Aiguille.LIU)1、數制轉換演算法十進位數N轉換為d進位數,根據公式 N = (N div d) * d + N mod d實現 ,堆棧的典型應用。C語言實現如下:#include "./stack.h"#include <stdlib.h>void conversion(int x, int
Time of Update: 2018-12-03
VC實現的小工具:http://goc.ac.cn/liuag/html/software_calculatorx.html計算公式很簡單,程式一看就明白。PS:那時個稅起征點是1600,現在都2000了,^-^//根據稅前工資和個稅起征點計算所得稅double calculateTax(double presalary, double base){ double tax; double TaxSalary = presalary - base; if(TaxSalary <
Time of Update: 2018-12-03
我們經常要在自己工作的UNIX/LINUX系統間SSH登入,SCP傳輸資料,總是要輸入密碼,很煩是吧?SSH支援多種登入驗證方式,預設使用的是鍵盤互動方式(Keyboard-Interactive),也就是手工輸入密碼的那種。而在實際應用中,有時需要免輸密碼直接登入SSH SERVER,如MPI作業需要在WNs間使用SCP傳輸資料(非互動方式)。這就需要使用公開金鑰(Public Key)驗證方式,並且設定passphrase為空白,以達到免輸密碼登入的目的。假設需要從A主機(CLIENT)
Time of Update: 2018-12-03
運算式求值是程式設計語言編譯中的一個最基本問題,它的實現是堆棧應用的一個重要例子。程式中使用常用、直觀的“算符優先法”實現。/* Copyright (c) 2006, 劉愛貴, Aigui.LIU@ihep.ac.cn, Computing Center of IHEP, Beijing, China */#include "stdafx.h"#include "iostream.h"#include "math.h"#include "time.h"#define TRUE 1#
Time of Update: 2018-12-03
這個大概是演算法課上的作業題。所謂的背包問題,可以描述如下:一個小偷打劫一個保險箱,發現柜子裡有N類不同大小與價值的物品,但小偷只有一個容積為M的背包來裝東西,背包問題就是要找出一個小偷選擇所偷物品的組合,以使偷走的物品總價值最大。這個問題的求解有很多種方法,本程式使用分枝限界法求解。/* Copyright (c) 2006, 劉愛貴, Aigui.LIU@ihep.ac.cn, Computing Center of IHEP, Beijing,
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在通訊協定的開發中,有的時候為了本地調試的需要,需要實現進程之間的通訊。在windows系統中,進程通訊的方式很多,比如說有管道通訊、記憶體映射、socket通訊、剪下板通訊等等。但是,其中,我認為最好的方式還是記憶體映射的方式,簡單、明了。因為通訊的資料是被很多進程共用的,所以必要的互斥措施是非常必要的。只要處理好互斥的關係,記憶體映射可以為我們做好不少事情。 在記憶體映射中,
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在嵌入式作業系統中,最難模仿的是系統中斷的問題。在windows下面,這是沒有辦法的事情。但是在linux下面,卻有一個非常便利的條件,那就是linux的訊號處理。因為使用者程式處理的時候,signal的處理和使用者線程的處理堆棧是一致的,這和中斷是完全吻合的。所以,如果你需要關閉中斷,可以這麼寫,sigprocmask(SIG_BLOCK, &new_set,
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在數學中,有一些資料選擇的內容。舉個例子來說,有這樣一組資料:1、2、3、4。現在我們打算從中挑選出1個資料,那麼有幾種選擇呢?結果應該是1、2、3、4;那麼如果挑選2個資料呢,怎麼選呢?那麼結果應該是12、13、14、15。以此類推,我們還能挑選出3個資料、4個資料的情況。 那麼,在程式上面應該怎麼表示呢?其實可以使用遞迴的方法。請大家和我一起計算一下: 如果需要從1、2、
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 八皇后是一道很具典型性的題目。它的基本要求是這樣的:在一個8*8的矩陣上面放置8個物體,一個矩陣點只允許放置一個物體,任意兩個點不能在一行上,也不能在一列上,不能在一條斜線符號上,當然也不能在一條右斜線上。 初看到這道題目,大家的第一印象是遍曆,但是經過實踐之後發現遍曆其實不好寫,而且複雜度很低。不僅需要遍曆8*8*8*8*8*8*8*8*8 = 2^24次資料,還要判斷各種條件,
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Time of Update: 2018-12-03
Glusterfs3.2.4/5支援五種Volume,即Distribute卷、Stripe卷、Replica卷、Distribute stripe卷和Distribute replica卷,這五種卷可以滿足不同應用對高效能、高可用的需求。(1)distribute volume:分布式卷,檔案通過hash演算法分布到brick server上,這種卷是glusterfs的基礎和最大特點;(2)stripe volume:條帶卷,類似RAID0,條帶數=brick
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 其實編程的朋友知道,不管學什麼語言,迴圈和遞迴是兩個必須學習的內容。當然,如果迴圈還好理解一點,那麼遞迴卻沒有那麼簡單。我們曾經對遞迴諱莫如深,但是我想告訴大家的是,遞迴其實沒有那麼可怕。所謂的遞迴就是函數自己調用自己而已,迴圈本質上也是一種遞迴。 1)求和遞迴函式 我們可以舉一個迴圈的例子,前面我們說過,如果編寫一個1到n的求和函數怎麼寫呢,你可能會這麼寫:int
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】