資料結構的C++實現之靜態鏈表

首先我們讓數組的元素都是由兩個資料域組成,data和cur。也就是說,數組的每一個下標都對應一個data和一個cur。資料域data用來存放資料元素,也就是通常我們要處理的資料;而遊標cur相當於單鏈表中的next指標,存放該元素的後繼在數組中的下標。我們把這種用數組描述的鏈表叫做靜態鏈表。數組的第一個元素,即下標為0的元素的cur就存放備用鏈表的第一個結點的下標;而數組的最後一個元素的cur則存放第一個有數值的元素的下標,相當於單鏈表的前端節點作用,當整個鏈表為空白時,則為0,表示無指向。如圖

資料結構的C++實現之二叉樹的定義和性質以及特殊二叉樹

一、二叉樹(Binary Tree)是n(n>=0)個結點的有限集合,該集合或者為空白集(稱為空白二叉樹),或者由一個根結點 和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。如圖1就是一棵二叉樹圖1二叉樹的特點:(1)每個結點最多有兩棵子樹,所以二叉樹中不存在度大於2的結點。(2)左子樹和右子樹是由順序的, 次序不能顛倒。(3)即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。二叉樹具有五種基 本形態:(1)空二叉樹;(2)只有一個根結點;(3)根結點只有左子樹;(4

資料結構的C++實現之二叉樹的遍曆和儲存結構

在《二叉樹的定義和性質》中我們已經認識了二叉樹這種資料結構。我們知道鏈表的每個節點可以有一個後繼,而二叉 樹(Binary Tree)的每個節點可以有兩個後繼。比如這樣定義二叉樹的節點:typedef struct node *link;struct node {unsigned char item;link l, r;};這樣的節點可以組織成 下圖所示的形態。二叉樹可以這樣遞迴地定義:1. 就像鏈表有頭指標一樣,每個二叉樹都有一個根指標(上圖中的root指標)指向它

資料結構的C++實現之隊列的順序儲存結構(迴圈隊列)

隊列(Queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。是一種先進先出的線性表(FIFO)。 允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。我們在《棧的順序儲存結構》中發現,棧操作的top指標在Push時增 大而在Pop時減小,棧空間是可以重複利用的,而隊列的front、rear指標都在一直增大,雖然前面的元素已經出隊了,但它 所佔的儲存空間卻不能重複利用。但大多數程式並不是這樣使用隊列的,一般情況下出隊的元素就不再有儲存價值了,這些 元素的儲存空間應該回收利用,

資料結構的C++實現之隊列的鏈式儲存結構

隊列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱為鏈隊列。為了操作上的 方便,我們將隊頭指標指向鏈隊列的前端節點,而隊尾指標指向終端節點。空隊列時,front和rear都指向前端節點。樣本程式 :(改變自《大話資料結構》)#include<iostream>using namespace std; typedef int ElemType; typedef struct Node{ ElemType data;

資料結構的C++實現之程式加圖示分析單鏈表的插入和刪除操作

下圖展示了單鏈表的基本結構:head指標是鏈表的頭指標,指向第一個節點 ,每個節點的next指標域指向下一個節點,最後一個節點的next指標域為NULL,在圖中用0表示。下面先來看程式( 棧的鏈式儲存實現,另外一個實現點這裡)和對應的輸出(注意輸出前進行了鏈表反轉(見《單鏈表反轉》,否則程式後面 的while迴圈輸出的順序是250,200,100),接著來剖析器:/* linkedlist.h */#ifndef LINKEDLIST_H#define

在C++中實現同步鎖,類似Synchronize(object){....}

在做C++的項目中發現,由於用慣了c#的lock(){}和java的Synchronize(){},windows內建的臨界區,互斥量,核心事件,訊號量用起來不太習慣,於是打算自己在vc++中封裝一個類似的東東。封裝這個我決定採用一個臨界區來做,最終的形式如下:synchronize(object) { //....無論此處是否發生異常,object都能被釋放掉。和c#的lock一樣。}不多說,開始代碼。先定義一個Mutex類class Mutex{public:    Mutex(void);

在C++Builder中使用Delphi控制項

Delphi的出現將一大批程式員帶入了Windows下的可視化編程,為一些C&C++的死黨程式員所羨慕、感歎。直到C++Builder的出現這些Programer才用到了夢寐以求的編程工具,也將一些不得已"投敵"到Delphi下的程式員又拉回到C++的懷抱。她正真將Windows下的可視化編程和物件導向程式設計語言有機的融合在一起。但是由於C++Builder面市時間較短固而可用的控制項不多,而且控制項的使用也只針對某一版本,相互之間的可互用性不好,除非你有Sourc

如何在C++ Builder中自訂屬性[properties]

Borland C++ Builder 對 C++ 進行了擴充,也可以象 Delphi 中一樣自訂類屬性。 對於簡單類型的屬性,可以如下定義:class TSome{protected:int a;int b;int s;int GetSum(void){ return s = a + b ; }void SetSum(int s){ this->s = s ; }public://...其它代碼__property int sum={read=GetSum,write=SetSum};/

C++的中抽象

在C++中,以類、虛函數等為代表的資料抽象功能一直是C++的核心和痛點。這裡我想結合自己的使用經驗,談談對C++中抽象的一點淺薄看法!我認為C++的抽象應該是指:從我們需要解決的問題出發,在與該問題相關的一組關聯對象中提取出主要的或共有的部分――說簡單一點,就是用相同的行為來操作不同的對象。從提出問題到找出與該問題相關的對象,這是一個互動的、反覆的過程。在對相關對象的抽象中,隨著認識的深入,我們可能會修改最初的目標,而最初目標的修改又可能使一組新的相關對象被加入進來。如:假設現在要設計一個基於廣

C++ Builder中利用組件傳送檔案

在Borland C++ Builder中,使用NMStrmServ和NMStrm組件可以很容易地在兩台電腦之間傳遞檔案。當然,你也可以使用基於FTPJ協議的檔案傳輸組件NMFTP,但使用NMStrmServ和NMStrm組件更加方便、快捷。首先,運行Borland C++

妙用Ctrl+Shift+C/V玩轉格式複製

我們都知道,在Word中可以使用“Ctrl+C/V”實現內容的複製和粘貼操作。但這僅限於複製對象本身 ,如果我們希望複製對象的屬性,例如文本的格式等,這就得可以藉助另外一組快速鍵了,它們就是 “Ctrl+Shift+C/V”。當我們要複製對象屬性時,只需要將該對象選中,然後按下“Ctrl+Shift+C”,再選中要應用該屬性

OpenRisc入門(2) 將C語言代碼轉換成verilog HDL或者VHDL

引言如何將C語言代碼轉換成verilog HDL或者VHDL呢?2.1 線上轉換:http://c-to-verilog.com/online.htmlC-to-Verilog.com是海法(Haifa)大學高層次綜合領域的一個學術研究而產生的一個網站。這個網站所用的編譯器是SystemRacer綜合系統的一個修改版本。這個編譯器的源碼可用於研究目的,並且已經發給了很多編譯器的研究組織。此外還有一些文章可供參考,這些文章介紹了這個綜合器的實現原理。2.2

在linux系統下使用C語言操作臨時檔案

有時程式需要儲存很大量的資料,或者在幾個進程間交換資料,這時您可能考慮到使用臨時檔案。使用臨時檔案要考慮幾個問題:1、保證臨時檔案間的檔案名稱不互助衝突。2、保證臨時檔案中內容不被其他使用者或者駭客偷看、刪除和修改。所以在linux下有專門處理臨時檔案的函數mkstemp函數mkstemp函數將在系統中以獨一無二的檔案名稱建立一個檔案並開啟,而且只有目前使用者才有訪問這個臨時檔案的許可權,目前使用者對這個臨時檔案可以開啟並進行讀、寫操作。mkstemp函數只有一個參數,這個參數是個以&ldquo

C++builder編程修改註冊表的問題

RootKey是註冊表的根索引值,比如運行regedit後看到的HKEY_USERS,HKEY_LOCAL_MACHINE就是RootKey,在TRegIniFile中預設的RootKey是HKEY_USERS.下面的例子是TRegistry的,TRegIniFile也差不多void __fastcall TfrmMainForm::WriteToMyRegistry(int table_count) {    //TODO: Add your source code here   

使用C++的託管擴充針對Windows表單編程

摘要:本文討論了如何使用 Visual C++ .NET 的託管擴充針對 Windows 表單編程,並提供了使用直接存取 Windows 表單類的手動編程技術的樣本,以及使用 Windows 表單設計器的樣本。此外,本文還對 Windows 表單和 Microsoft 基礎類 (MFC) 應用程式進行了比較。簡介長期以來,程式員們都使用 C 和 C++ 來開發 Windows GUI 應用程式。對於我們當中很多人來說,這一段曆史可以追溯到 Windows 2.0 時期,那時,我們使用基於 C

C++中類的繼承特性

整個c++程式設計全面圍繞物件導向的方式進行,類的繼承特性是c++的一個非常非常重要的機制,繼承特性可以使一個新類獲得其父類的操作和資料結構,程式員只需在新類中增加原有類中沒有的成分。可以說這一章節的內容是c++物件導向程式設計的關鍵。下面我們簡單的來說一下繼承的概念,先看下圖:上圖是一個抽象描述的特性繼承表交通工具是一個基類(也稱做父類),通常情況下所有交通工具所共同具備的特性是速度與額定載人的數量,但按照生活常規,我們來繼續給交通工具來細分類的時候,我們會分別想到有汽車類和飛機類等等,汽車類

Linux作業系統下C語言編程入門

這裡向大家介紹一下在Linux/UNIX 的機器上,進行 C/C++ 編程的一些入門級知識。· 所需具備的背景知識· 開發所需的基本環境· 獲得協助的途徑· 通過一個執行個體瞭解基本步驟Prerequisite 先決條件:在Linux上編寫 C 程式,至少要熟悉以下兩方面的基礎知識:1. C語言的編程基礎,至少要知道一些基本的文法,控制流程程等編程常識。對常用的標準 C 函數庫有常識性的瞭解。2. 對Linux/UNIX

Linux下C++記憶體管理的指標傳遞詳解

指標參數是如何傳遞記憶體的?如果函數的參數是一個指標,不要指望用該指標去申請動態記憶體。樣本7-4-1中,Test函數的語句 GetMemory(str, 200)並沒有使str獲得期望的記憶體,str依舊是NULL,為什麼?void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); // str

Linux系統下監測C程式的記憶體泄露

在linux下些C語言程式,最大的問題就是沒有一個好的編程IDE,當然想kdevelop等工具都相當的強大,但我還是習慣使用kdevelop工具,由於沒有一個習慣的編程IDE,記憶體檢測也就成了在linux下編寫程式的一個大問題。是不是說沒有一種記憶體檢查工具能夠在linux使用呢,也不是,像valgrind工具還是相當不錯的。他的下載地址是http://valgrind.org/downloads/current.html#current 下載一個valgrind 3.2.3 (tar.bz2

總頁數: 4314 1 .... 2893 2894 2895 2896 2897 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.