Time of Update: 2018-12-03
優先隊列是一種非常常見的資料結構,而最大最小樹又是其中最具代表性的一種優先隊列。在此詳細的講述一下最大樹的插入、刪除、初始化等基本操作的思路。在文章最後附上一段Demo源碼提供測試,使用C++語言實現了最大堆。首先先介紹一下最大樹的概念。最大樹是每個節點的值都要大於或等於其子節點的值的樹。而最大堆就是最大的完全二叉樹。因為最大堆是完全二叉樹,所以擁有n個元素的堆的高度為[log2(n+1)]。因此如果可以在O(height)的時間內完成插入和刪除操作,則其複雜度為O(log2n)。下面是一個最大
Time of Update: 2018-12-03
/************************************************************************* 著作權:汪海的實驗室 作者:汪海洋 日期:2013-03-11 描述:資料結構課程設計,使用堆棧解決迷宮的尋徑問題 **************************************************************************/#include
Time of Update: 2018-12-03
先來看一下編譯運行c程式的基本命令。雖然剛裝好的系統中已經有GCC了,但是這個GCC什麼檔案都不能編譯,因為缺少一些必須的標頭檔,所以要安裝build-essential這個軟體包。輸入命令:sudo apt-get install build-essential 其中:sudo 是linux系統上“以超級使用者身份運行”的意思,允許系統管理員讓普通使用者執行一些root命令。apt是一種包管理工具,後面的 install是告訴我想用apt安裝某一個軟體包
Time of Update: 2018-12-03
Boost C++ 函式庫(Libraries)是一組擴充C++功能性的經過同行評審(Peer-reviewed)且開放源碼程式庫。大多數的函式為了能夠以開放源碼、封閉專案的方式運作,而授權於Boost軟體授權條款(Boost Software License)之下。許多Boost的開發人員是來自C++標準委員會,而部份的Boost函式庫成為C++的TR1標準之一。 今天學習了兩個:boost::array,boost::lambda. 一個例子:#include
Time of Update: 2018-12-03
總是聽說編譯的時候什麼堆啊,棧啊之類的。以前學資料結構的時候用過,棧比較常用,像搜尋類的演算法題都是要用到棧的。還有運算式計算也是。至於堆的話,排序的時候用的比較多。關於這方面,網上已經講了很多了,下面把我看到比較好的,總結下。 一般我們編譯的C代碼中在記憶體中分下面幾個區: 1、棧區(stack):由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。 2、堆區(heap):一般由程式員分配釋放,
Time of Update: 2018-12-03
回呼函數就是一個通過函數指標調用的函數。如果你把函數的指標(地址)作為參數傳遞給另一個函數,當這個指標被用為調用它所指向的函數時,我們就說這是回呼函數。回呼函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。 上面是百度百科的定義,下面還是看個簡單的例子吧。 #ifdef __cplusplusextern "C" {#endif/****************************************
Time of Update: 2018-12-03
http://blog.csdn.net/eroswang/archive/2009/06/12/4265046.aspx 1,防止一個標頭檔被重複包含 #ifndef COMDEF_H #define COMDEF_H //標頭檔內容 #endif 2,重新定義一些類型,防止由於各種平台和編譯器的不同,而產生的類型位元組數差異,方便移植。 typedef unsigned char boolean; /* Boolean value type. */ typedef
Time of Update: 2018-12-03
/******************************************************************************************** * author:conowen@大鐘 *
Time of Update: 2018-12-03
還有SD卡的檔案格式識別還不會,等明天和飛刀一起討論下,基本的Android的SD卡的自動掛載已經實現了,可惜只支援FAT格式的,EXT格式的他不支援,添加了那些其他格式的掛載還是不行,主要是識別還不知道怎麼去實現。好了,既然這麼著,還是把以前看的一些函數指標做個記錄吧。因為linux驅動中很多很多都用到了函數指標,一開始我都覺得奇怪,後來才知道這個。都怪自己以前對於指標的一些知識學得太少了,太淺了。 先看個簡單的代碼吧:#include <stdio.h>
Time of Update: 2018-12-03
1、在static方法中不可訪問非static的成員,只能定義static類型的類成員變數讓其訪問。2、若要在class A中的靜態方法訪問class B中的非靜態成員(函數或者變數)時,需要在class A中,執行個體化class B的對象,並且執行個體化成class A的靜態成員。步驟:在class A中的標頭檔聲明static class B mClass_member;在 class A中的cpp中初始化class B class
Time of Update: 2018-12-03
常用java開發Android的application,一到sourceinsight去寫C程式,經常會忘記一些C語言的基礎知識,特作此備忘錄,謹記之。1、指標:在電腦中,所有資料都存放在電腦的記憶體中,也就是說每個變數都對應著一個地址,而這個地址“指向”該變數,因此一個變數的地址稱為該變數的“指標”,用語存放地址的變數 稱為指標變數。指標變數和一般變數概念差不多,指標變數也是存放在電腦記憶體中,也就是說指標變數事實上也會有一個地址。(雙指標)定義一個指標變數int
Time of Update: 2018-12-03
C# 編程指南如何:使用字典儲存事件執行個體(C# 編程指南) accessor-declarations 的一種用法是公開大量的事件但不為每個事件分配欄位,而是使用字典來儲存這些事件執行個體。這隻有在具有非常多的事件、但您預計大部分事件都不會實現時才有用。樣本C#複製代碼public delegate void EventHandler1(int i);public delegate void EventHandler2(string s); publicclass
Time of Update: 2018-12-03
今日網上看到有人用C++實現了binder通訊的小例子,但是沒有給出完整的demo,自己弄了過來整理了一下,可以在真機上運行。基本架構都是一樣,代碼就不分析了,要分析又得說一遍binder的機制,反正就可以把它當作一個模板來用了,要增加或修改函數,也就是在ITest中增加virtual函數,分別在bp, bn,class Test端實現,並在onTransact中增加case分支即可,夠簡單吧,代碼如下:binder_test.h:#ifndef __BINDER_TEST_H#define _
Time of Update: 2018-12-03
C# 編程指南匿名方法(C# 編程指南) 在 2.0 之前的 C# 版本中,聲明委託的唯一方法是使用命名方法。C# 2.0 引入了匿名方法。要將代碼塊傳遞為委託參數,建立匿名方法則是唯一的方法。例如:C#複製代碼// Create a handler for a click eventbutton1.Click += delegate(System.Object o, System.EventArgs e) {
Time of Update: 2018-12-03
1.Linux檔案系統 Linux支援多種檔案系統,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在這些具體檔案系統的上層,Linux提供了虛擬檔案系統(VFS)來統一它們的行為,虛擬檔案系統為不同的檔案系統與核心的通訊提供了一致的介面。給出了Linux中檔案系統的關係: 在Linux平台下對檔案編程可以使用兩類函數:(1)Linux作業系統檔案API;(2)C語言I/O庫函數。
Time of Update: 2018-12-03
來自:http://hi.baidu.com/litomboy/blog/item/08dade95a32c3148d0135e38.html其他http://www.zeliu.com/digg_view.asp?id=112題1:編寫一個函數,作用是把一個char組成的字串迴圈右移n個。比如原來是“abcdefghi”如果n=2,移位後應該是“hiabcdefgh” 函數頭是這樣的://pStr是指向以''結尾的字串的指標//steps是要求移動的nvoid LoopMove (
Time of Update: 2018-12-03
很多C/C++的初學者,常常被一些複雜的聲明語句弄得暈頭轉向,滿頭霧水。比如說:char *(*(*a[])())(),這個聲明是什麼意思呢? 不用抓耳撓腮,在linux環境下,有一個工具能幫我們解析,它就是cdecl 。它能在C/C++聲明和英語間轉換。讓我們先看看man cdecl裡的描述吧:DESCRIPTION Cdecl (and c++decl) is a program for encoding and decoding C (or C++)
Time of Update: 2018-12-03
題目是#include <iostream> int main(){ std::cout<<"This is in main"<<std::endl; return 0;}如何在不修改上述代碼中mian()裡面的部分,使輸出的內容為:StartThis is in
Time of Update: 2018-12-03
基本知識:在核心編程中,可能經常會有一些資料結構需要反覆使用和釋放,按照通常的思路,可能是使用kmalloc和kfree來實現。但是這種方式效率不高,Linux為我們提供了更加高效的方法——Slab快取管理器。動態建立固定大小的記憶體對象,雖然kmalloc的時間複雜度並不大,但是聯絡到空間複雜度,還是採用kmem_cache_alloc的好;而非固定大小的記憶體申請,只能經由kmalloc來解決。 xfrm_input.c中關於kmem_cache_alloc的代碼:(按檔案中代碼的順序) 先
Time of Update: 2018-12-03
/********************************** 雙色球自動選號**********************************/#include <cmath>#include <iostream>#include <ctime>using namespace std;int main(){ int *A = new int[6]; srand((unsigned int)time(0));