Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前面我們講到了隊列,今天我們接著討論另外一種資料結構:堆棧。堆棧幾乎是程式設計的命脈,沒有堆棧就沒有函數調用,當然也就沒有軟體設計。那麼堆棧有什麼特殊的屬性呢?其實,堆棧的屬性主要表現在下面兩個方面: (1)堆棧的資料是先入後出 (2)堆棧的長度取決於棧頂的高度 那麼,作為連續記憶體類型的堆棧應該怎麼設計呢?大家可以自己先試一下: (1)設計堆棧節點typedef
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 有的時候,處於記憶體中的資料並不是連續的。那麼這時候,我們就需要在資料結構中添加一個屬性,這個屬性會記錄下面一個資料的地址。有了這個地址之後,所有的資料就像一條鏈子一樣串起來了,那麼這個地址屬性就起到了穿線連結的作用。 相比較普通的線性結構,鏈表結構的優勢是什麼呢?我們可以總結一下: (1)單個節點建立非常方便,普通的線性記憶體通常在建立的時候就需要設定資料的大小 (2
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前面的部落格中,我們曾經有一篇專門講到單向鏈表的內容。那麼今天討論的鏈表和上次討論的鏈表有什麼不同呢?重點就在這個"迴圈"上面。有了迴圈,意味著我們可以從任何一個鏈表節點開始工作,可以把root定在任何鏈表節點上面,可以從任意一個鏈表節點訪問資料,這就是迴圈的優勢。 那麼在實現過程中,迴圈單向鏈表有什麼不同? 1)列印鏈表資料void print_data(const
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 2.4 刪除節點的左右子樹都存在,此時又會分成兩種情形 1)左節點是當前左子樹的最大節點,此時只需要用左節點代替根節點即可/** * 10 ======> 6* / \ / \* 6 15 5 15
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 鏈表逆轉是面試環境中經常遇到的一道題目,也是我們在實際開發中可能會遇到的開發需求。和線性逆轉不一樣,單向鏈表的節點需要一個一個進行處理。為了顯示兩者之間的區別,我們分別對線性記憶體和鏈表進行逆轉: (1)普通連續記憶體資料的反轉分析STATUS normal_revert(int array[], int length){int* pData ;int index =
Time of Update: 2018-12-03
[引言]我調研資料聚類的目的是想基於聚類對檔案訪問模式進行預測。許多系統把資料訪問請求當作是獨立的事件。實際上,資料請求並非完全隨機,而是由使用者或程式的行為驅動的,存在特定的訪問模式。同類使用者或多或少具有相同的訪問模式,同類檔案被同時訪問的可能性相對比較大,同一個工作集
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 3 普通節點的刪除 3.1 刪除的節點沒有左子樹,也沒有右子樹 測試案例1: 刪除節點6/** * 10 ======> 10* / \ \* 6 15 15*
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 我們知道在x86的32位cpu上面,int表示32位,如果核算成整數的話,大約是40多億。同樣,如果在64位cpu上面,能表示的最大整數就是64位二進位,表示的數值要大得多。那麼在32位如果想表示大整數怎麼辦呢?那隻能靠我們自己想辦法了。 首先我們回顧一下我們手算整數的加減、乘除法是怎麼做到的: (1)記住9*9之間的乘法口訣 (2)記住個位與個位之間的加減法 (
Time of Update: 2018-12-03
註:“檔案訪問預測”是我論文的研究工作中的一部分。 處理器與I/O存在速度鴻溝、網路頻寬的限制(特別是無線移動網路)、網路應用的斷連操作(如移動計算、AFS)等原因,造成了資料訪問的延遲,IO和網路成為了制約效能的瓶頸。 為瞭解決這個問題,通常採用緩衝(Cache)和預取(Pre-fetch)技術。緩衝技術利用資料訪問的時間局部性,對訪問過的資料進行暫時的保留。但由於緩衝空間大小以及更新演算法的制約,當資料頻繁更新時,緩衝帶來的效能改善不再顯著。預取(Pre-
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前兩天上網的時候看到一個特別有意思的題目,在這裡和朋友們分享一下: 有一個人準備開始爬樓梯,假設樓梯有n個,這個人只允許一次爬一個樓梯或者一次爬兩個樓梯,請問有多少種爬法? 在揭曉答案之前,朋友們可以自己先考慮一下:
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在很多面試的題目中,求n!結果中零的個數也是經常遇到的一道題目。那麼這道題目的解決方案究竟是什麼呢?我願意在此和大家分享一下我自己的一些看法,有不同見解的朋友歡迎多提意見。 求n!中零的個數主要在於乘數中有沒有能被2和5整除的數,只要能找到被2和5整數的乘數即可,所以,My Code流程是這樣的: (1)尋找當前資料中有沒有可以整除2的整數,同時修改整數的數值
Time of Update: 2018-12-03
三種方法:(1)使用臨時變數 (2)不使用中間變數,僅使用加法運算 (3)不使用中間變數,使用異或XOR操作#include <iostream.h>template <typename T>void swap_var(T &a, T &b){ T tmp; tmp = a; a = b; b = tmp;}template <typename T>void swap_add(T &a, T &b){ a = a -
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 在面試環節中,有一道題目也是考官們中意的一道題目:如果統計一段由字元和和空格組成的字串中有多少個單詞? 其實,之所以問這個題目,考官的目的就是想瞭解一下你對狀態機器瞭解多少。 (1) 題目分析 從題目上看,如果對一個字串進行處理,那麼可以有下面幾種情形:初始狀態,字元狀態,空格狀態,結束狀態。那麼這幾種狀態之間應該怎麼遷移呢? 初始狀態:
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 撲克牌洗牌是我們生活中比較喜歡玩的一個遊戲。那麼我們有沒有什麼辦法自己設計一個撲克牌洗牌的方法呢?在c運行庫當中有一個隨機函數rand,它可以產生0~32767之間的任意數。那麼有沒有可能利用這麼一個函數對我們撲克牌進行隨即洗牌呢? 在這裡我拋磚引玉一下,談一談自己目前已經看到的兩個演算法。歡迎朋友們談一談其他的方法。 (1)全域洗牌法 步驟如下所示:
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 這裡的線性結構實際上指的就是連續記憶體的意思,只不過使用“線性”這個詞顯得比較專業而已。前面一篇部落格介紹了現象結構的處理方法,那麼在這個基礎之上我們是不是添加一些屬性形成一種新的資料結構類型呢?答案是肯定的,隊列便是其中的一種。 隊列的性質很簡單: (1)隊列有頭部和尾部 (2)隊列從尾部壓入資料 (3)隊列從頭部彈出資料
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 選擇排序是和冒泡排序差不多的一種排序。和冒泡排序交換相連資料不一樣的是,選擇排序只有在確定了最小的資料之後,才會發生交換。怎麼交換呢?我們可以以下面一組資料作為測試: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2, 4, 5, 9 第四次排序: 1, 2, 4, 5, 9
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前面我們講過雙向鏈表的資料結構。每一個迴圈節點有兩個指標,一個指向前面一個節點,一個指向後繼節點,這樣所有的節點像一顆顆珍珠一樣被一根線穿在了一起。然而今天我們討論的資料結構卻有一點不同,它有三個節點。它是這樣定義的:typedef struct _TREE_NODE{int data;struct _TREE_NODE* parent;struct _TREE_NODE*
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 基數排序是另外一種比較有特色的排序方式,它是怎麼排序的呢?我們可以按照下面的一組數字做出說明:12、 104、 13、 7、 9 (1)按個位元排序是12、13、104、7、9 (2)再根據十位排序104、7、9、12、13 (3)再根據百位排序7、9、12、13、104 這裡注意,如果在某一位的數字相同,那麼排序結果要根據上一輪的數組確定,舉個例子來說:07和0
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 二叉樹的節點插入比較簡單。一般來說,二叉樹的插入主要分為以下兩個步驟: 1) 對當前的參數進行判斷,因為需要考慮到頭結點,所以我們使用了指標的指標作為函數的輸入參數 2) 分情況討論: 如果原來二叉樹連根節點都沒有,那麼這個新插入的資料就是根節點;
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】