原创 內存的頁面置換算法

請求分頁系統建立在基本分頁系統基礎之上,爲了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬存儲器的方法。 在請求分頁系統中,只要求將當前需要的一部分頁面裝入內存,以便可以啓動作業運行。在作業執行過

原创 劍指Offer——鏈表中環的入口結點

題目描述一個鏈表中包含環,請找出該鏈表的環的入口結點。方法一:對鏈表進行遍歷,利用set等結構,將已經遍歷過的節點存入set,每遍歷一個節點,判斷set中是否已經存在該節點,如果存在,那麼說明鏈表存在環,且該節點就是入口節點,返回該節點;

原创 劍指Offer——數組中出現次數超過一半的數字

題目描述數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。方法一最先想到的是對

原创 劍指Offer——二叉搜索樹與雙向鏈表

題目描述輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。題目分析二叉樹中每個節點都有兩個指向子節點的指針;在雙向鏈表中,每個節點也有兩個指針,分別指向前一個節點和後一個節點

原创 劍指Offer——複雜鏈表的複製

題目描述輸入一個複雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果爲複製後複雜鏈表的head。(注意,輸出結果中請不要返回參數中的節點引用,否則判題程序會直接返回空)概念複雜鏈表示例

原创 劍指Offer——字符串的排列

題目描述輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。輸入描述:輸入一個字符串,長度不超過9(可能有字符重複)

原创 劍指Offer——按之字形順序打印二叉樹

題目描述請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。方法一方法和從上往下打印二叉樹類似,遍歷順序是從上到下,每一行按照從左到右的順序進行遍

原创 劍指Offer——包含min函數的棧

題目描述定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。調用min、push及pop的時間複雜度都是O(1)。方法一考慮使用兩個棧,一個數據棧(就是普通的棧),實現棧的push、pop等操作;另一個輔助棧用來存放每次

原创 劍指Offer——二叉樹中和爲某一值的路徑

題目描述輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。解題思路可以通過遞歸方法解決這個問題,我們每訪問到一個節點的時候,對該節點進行判斷:如果該

原创 劍指Offer——對稱的二叉樹

題目描述請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。例如下圖中第一個樹是對稱的,而第二個不是。解題思路1、二叉樹的鏡像:二叉樹的鏡像定義:源二叉樹 8

原创 劍指Offer——從上往下打印二叉樹

題目描述從上往下打印出二叉樹的每個節點,同層節點從左至右打印。解題思路本題需要藉助隊列來完成,每一次打印一個結點的時候,如果該結點有子節點,把該結點的子節點放到隊列的尾。接下來到隊列的頭部取出最早進入隊列的結點,重複前面打印操作,直到隊列

原创 劍指Offer——序列化二叉樹

題目描述請實現兩個函數,分別用來序列化和反序列化二叉樹題目解析:題目的要求似乎不是太清晰,序列化的意思是指將一些特定的數據結構,變成有格式信息的字符串。例如對一個鏈表,可以將1->2->3->4->NULL序列化爲"1,2,3,4"。對於

原创 劍指Offer——合併兩個排序的鏈表

題目描述輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。方法一新建一個鏈表,遍歷兩個輸入的鏈表​,進行節點值的比較,新建鏈表的next指向值較小的節點。代碼/* struct ListNode

原创 劍指Offer——二叉搜索樹的後序遍歷序列

題目描述輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。概念1、二叉搜索樹:二叉搜索樹(英語:Binary Search Tree),也稱二叉查找樹

原创 C++顯式構造函數

如果C++類的其中一個構造函數有一個參數,那麼在編譯的時候就會有一個缺省的轉換操作:將該構造函數對應數據類型的數據轉換爲該類對象。 如下面的例子: #include <iostream> using namespace std; cla