Time of Update: 2018-12-03
#include <iostream>using namespace std;const int MaxSize=20;//數組的最大尺寸int p;//一個臨時的數字用來標記當前操作的數組的位置char MidOrder[MaxSize];//用來儲存中序遍曆順序的數組char PreOrder[MaxSize];//用來儲存先序遍曆順序的數組//初始化的方法void Init(){cout << "In-order:";cin >>
Time of Update: 2018-12-03
優先隊列是一種非常常見的資料結構,而最大最小樹又是其中最具代表性的一種優先隊列。在此詳細的講述一下最大樹的插入、刪除、初始化等基本操作的思路。在文章最後附上一段Demo源碼提供測試,使用C++語言實現了最大堆。首先先介紹一下最大樹的概念。最大樹是每個節點的值都要大於或等於其子節點的值的樹。而最大堆就是最大的完全二叉樹。因為最大堆是完全二叉樹,所以擁有n個元素的堆的高度為[log2(n+1)]。因此如果可以在O(height)的時間內完成插入和刪除操作,則其複雜度為O(log2n)。下面是一個最大
Time of Update: 2018-12-03
//鏈表描述二叉樹的建立與遍曆#include <iostream>using namespace std;/**********************************//*以下內容是一個隊列資料結構的定義*//*隊列引入是為實現二叉樹的逐層遍曆*//**********************************/template <class T> class Node{ public: T data;
Time of Update: 2018-12-03
二話不多說,首先我們先來看個霍夫曼編碼樹的栗子。假設我們想要壓縮的是這個字串:“beep boop beer!”首先統計它們的出現次數,得到下面這張表:然後根據出現的頻率依次排序,放在一個優先隊列Priority Queue中:接下來的任務就是把這個Priority Queue轉換成二叉樹。我們始終從Priority
Time of Update: 2018-12-03
/************************************************************************* 著作權:汪海的實驗室 作者:汪海洋 日期:2013-03-11 描述:資料結構課程設計,使用堆棧解決迷宮的尋徑問題 **************************************************************************/#include
Time of Update: 2018-12-03
首先先看一下散列的定義:散列:用一個散列函數把關鍵字映射到散列表中的特定位置。在理想的情況下,如果元素e的關鍵字k,散列函數為f,那麼e在散列表中的位置就是f(k)。這種轉換是一種壓縮映射,也就是說,散列值的空間通常遠小於輸入的空間,從函數的定義我們可以知道,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說散列函數就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函數。那麼下面我們來通過兩個散列表的主要問題進一步的瞭解一下散列表的特點。散列表的兩個主要問題:常見
Time of Update: 2018-12-03
先來介紹一下,一棵非空的二叉搜尋樹滿足以下特徵:1.每個結點都有一個作為搜尋依據的關鍵碼,所有結點的關鍵碼互不相同。2.左子樹(如果存在)上的所有結點的關鍵碼均小於根結點的關鍵碼。3.右子樹(如果存在)上的所有結點的關鍵碼均大於根結點的關鍵碼。4.根結點的左右子樹也都是二叉搜尋樹。比如就是一棵二叉搜尋樹:下面來詳細介紹一下二叉搜尋樹的相關操作。二叉搜尋樹尋找操作:分割式尋找法:○若根結點的關鍵碼等於尋找的關鍵碼,成功。○否則,若小於根結點的關鍵碼,查其左子樹。大於根結點的關鍵碼,查其右子樹。比如
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
c++ volatile用法(轉)一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,最佳化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在寄存器裡的備份。下面是volatile變數的幾個例子:1) 平行裝置的硬體寄存器(如:狀態寄存器)2) 一個中斷服務子程式中會訪問到的非自動變數(Non-automatic variables)3) 多線程應用中被幾個任務共用的變數回答不出這個問題的人是不會被僱傭的。
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
知道大小端,但是都沒有整理下,只知道網路要用到big-endian,也就是大端模式。在各種電腦體繫結構中,對於位元組、字等的儲存機制有所不同,因而引發了電腦通訊領域中一個很重要的問題,即通訊雙方交流的資訊單元(位元、位元組、字、雙字等等)應該以什麼樣的順序進行傳送。如果不達成一致的規則,通訊雙方將無法進行正確的編/解碼從而導致通訊失敗。目前在各種體系的電腦中通常採用的位元組儲存機制主要有兩種:Big-Endian和Little-Endian。
Time of Update: 2018-12-03
首先a是一個數組名,當看到這個a與&a時,一般我們的理解都是這個數組的首地址。沒錯,如果加上列印的話,確實兩個值是一樣的。不過&a是整個數組的首地址,a則是數組首元素的地址,雖然值一樣,但是意義卻不相同。在此之前有必要先看下c程式在記憶體中的分布圖。下面來看一個例子吧還是。範例程式碼:#include <stdio.h>int main(int argc, char *argv[]){int i;int a[]={1, 2, 3, 4, 5};int s;int
Time of Update: 2018-12-03
上篇文章,知道了,C代碼編譯後存放在記憶體中的位置,那麼C代碼的整個編譯過程又是怎樣的呢?一條命令gcc hello.c就可以編譯成可執行程式a.out,然後./a.out之後就可以執行hello.c這個程式的代碼了。下面的文章分析的不錯,就整理了下。hello.c:#include<stdio.h>int main(){ printf(“Hello World\n”); return 0;}實際上gcc
Time of Update: 2018-12-03
相信很多人學c的時候就不知道c中還有位域這麼一說,自認為c學得還行,可是離精通還是有一定的距離啊,趕緊搞明白位域這一說法。所謂“位域”是把一個位元組中的二進位劃分為幾個不同的地區,並說明每個地區的位元。每個域有一個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以把幾個不同的對象用一個位元組的二進位位域來表示。舉個簡單的例子吧:struct test{ int a:4; int b:8; int c:6;};由可知test結構體在記憶體中的分配了。所以他的大小也即:
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
轉貼:用C#下的Raw Socket編程實現網路封包監視,來自網路,來源不祥http://www.cnblogs.com/onlytiancai/archive/2007/10/14/924075.html 談起socket編程,大家也許會想起QQ和IE,沒錯。還有許多網路工具如P2P、NetMeeting等在應用程式層實現的應用程式,也是用socket來實現的。Socket是一個網路編程介面,實現於網路應用程式層,WindowsSocket包括了一套系統組件,充分利用了Microsoft
Time of Update: 2018-12-03