Time of Update: 2018-12-04
一、題目說明如何對每個元素僅用一個指標np[x](而不是兩個指標next和prev)來實現雙鏈表。假設所有指標值都是k位的整型數,且定義np[x] = next[x] XOR prev[x],即next[x]和prev[x]的k位異或(NIL用0表示)。注意要說明訪問表頭所需的資訊,以及如何?在該表上的SEARCH、INSERT和DELETE操作。如何在O(1)時間內實現這樣的表。二、思路np[x] = next[x] XOR prev[x],根據異或的性質,next[x] = np[x]
Time of Update: 2018-12-04
一、題目:我們常常希望一個雙鏈表中的所有元素在儲存空間中能夠緊湊地排列在一起,例如使用多重數組表示中的前m個下標位置(在一個分頁的虛擬電腦環境中情況就是這樣的)。假設鏈表以外沒有指向鏈表元素的指標,請說明如何?過程ALLOCATE_OBJECT和FREE_OBJECT,才能使這種表比較緊湊。(提示:使用棧的數組實現)思考:假設當前的數組是緊湊的,即數組中有f個元素,都位於數組的前f個位置分配一個新的元素時,把f+1的位置分配給它刪除一個元素時,假設待刪除的元素的位置是i,先修改元素prev[i]
Time of Update: 2018-12-04
一、概念1.對象的多重數組表示:對一組具有相同域的對象,每一個對象都可以用一個數組來表示2.對象的單數組表示:一個對象佔據儲存中的一組連續位置二、代碼int Allocate_Object(){if(free == NULL){cout<<"error:out of space"<<endl;exit(0);}else{int x = free;free = next[x];return x;}}void Free_Object(int x){next[x] =
Time of Update: 2018-12-04
題目:重寫過程DFS,利用一個棧來消除遞迴代碼:#include <iostream>#include <stack>using namespace std;#define N 10#define WHITE 0#define GRAY 1#define BLACK 2//邊結點結構struct Edge{int start;//有向圖的起點int end;//有向圖的終點Edge *next;//指向同一個起點的下一條邊int type;//邊的類型Edge(int
Time of Update: 2018-12-04
一、概念1.二叉樹(1)用域p、left、right來存放指向二叉樹T中的父親、左兒子、右兒子。沒有則為NULL。(2)結點結構struct node{ node *p; node *left; node *right; int key;};(3)樹的結構struct Bin_Tree{ node *head;};2.分支數無限的有根樹(1)左孩子右兄弟標記法(2)結點結構struct node{ node *p; node *left_child;
Time of Update: 2018-12-04
一、綜述定義:對有向無迴路圖G=(V,E)進行須拓撲排序後,結果為該圖所有頂點的一個線性序列,滿足如果G包含邊(u, v),則在該序列中,u就出現在v的前面(如果圖是有迴路的,就不可能存在這樣的線性序列)。定理:一個有向圖G是無迴路圖,若且唯若對G進行深度優先搜尋時沒有得到反向邊。二、代碼//用鄰接表實現圖的轉置#include <iostream>using namespace std;#define N 14#define WHITE 0#define GRAY
Time of Update: 2018-12-04
一、什麼是虛擬檔案系統1.VFS是使用者的應用程式與檔案系統實現之間的抽象層2.VFS支援以下三種類型的檔案系統(1)磁碟檔案系統(2)網路檔案系統(3)特殊檔案系統二、通用檔案系統模型1.VFS的主要思想是引入一個檔案系統模型,這個模式能夠表示所有支援的檔案系統2.通用檔案模型的構成(1)超級塊super_block:存放已安裝檔案系統的有關資訊,所有的超級塊對象以雙向鏈表的形式連結在一起(2)索引結點塊inode:存放具體檔案的一般資訊,對檔案是唯一的,並且隨著檔案的存在而存在(3)檔案對象
Time of Update: 2018-12-04
一、綜述 定義: 二、代碼#include <iostream>using namespace std;#define N 10#define WHITE 0#define GRAY 1#define BLACK 2//邊結點結構struct Edge{int start;//有向圖的起點int end;//有向圖的終點Edge *next;//指向同一個起點的下一條邊int type;//邊的類型Edge(int s, int
Time of Update: 2018-12-04
用指標傳遞字典樹,時空效率更高用字串代替字元數組,更方便#include <iostream>#include <string>#include <algorithm>using namespace std;string str[10005];struct dictree{struct dictree *child[10];int n;dictree(){ memset(child,0,sizeof(child));n=0;}};bool
Time of Update: 2018-12-04
一、I/O體繫結構二、I/O匯流排1.匯流排電腦內部大部分硬體裝置通過匯流排串連一台電腦可以有幾條匯流排,可以是不同類型匯流排與匯流排之間用橋串連2.I/O匯流排CPU與I/O裝置之間的資料通路通常稱為I/O匯流排其中,地址匯流排16位,資料匯流排8位、16位或32位三、I/O連接埠1.概念每個串連到I/O匯流排上的調和都有自己的I/O地址集,稱為I/O連接埠CPU使用地址匯流排選擇所請求的I/O連接埠,使用資料匯流排在CPU寄存器和連接埠之間傳送資料I/O連接埠可以被映射到物理地址空間,使用對
Time of Update: 2018-12-04
題目連結http://acm.hdu.edu.cn/showproblem.php?pid=1166 題目分析將一組數組s[N]輸入Query a b,輸出SUM(sa + …… + sb)輸入Add a b,s[a] = s[a] + b輸入Sub a b,s[a] = s[a] - b數組動態求和,明顯的樹狀數組,調用樹狀數組模版:樹狀數組 代碼:#include <iostream>#include "TreeArray.h"using namespace std;int
Time of Update: 2018-12-04
HDU1787歐拉函數之線上演算法歐拉函數的介紹:φ函數的值通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn為x的所有質因數,x是不為0的整數。(注意:每種質因數只一個。比如12=2*2*3 那麼φ(12)=12*(1-1/2)*(1-1/3)=4)若n是質數p的k次冪,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因為除了p的倍數外,其他數都跟n互質。φ(1)=1(唯一和1互質的數就是1本身)。
Time of Update: 2018-12-04
一、裝置管理與檔案管理的關係1.檔案操作是對裝置操作的組織與抽象裝置操作是對檔案操作的最終實現二、裝置驅動程式模型1./sys -----> 匯流排 -----> PCI -----> 驅動程式 -----> 串口 -----> 裝置2.裝置驅動程式模型中的幾個主要的層次:(1)匯流排,見Linux2.6
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1281 題目描述:在一個N*M大小的棋盤中,有K個空位置,(1)在這些空位置上最多能放多少的“車”(一行或一列最多一個)。(2)空位置中,有的位置若不放“車”,就無法保證放盡量多的“車”,這樣的格子被稱做重要點,求重要點的個數 思考過程:這題可以看成行與列的二分匹配問題,因為每行每列至多隻能放一個棋子。第i行與j列匹配代表棋盤第i行j列這個位置放棋子。那麼,棋盤上的點就是二分圖的邊;“車”的個數就是
Time of Update: 2018-12-04
一、塊裝置的操作的處理體繫結構1.VFS(虛擬檔案系統)VFS位於塊裝置的處理體繫結構的上層,提供一個通用的檔案模型。VFS和塊裝置的關係見Linux2.6裝置管理系統調用的服務常式調用一個合適的VFS函數,將檔案描述符和檔案內的位移量傳遞給它。2.磁碟快取VFS函數確定所請求的資料是否已經存在磁碟快取中,若存在,就沒有必須訪問磁碟上的資料了。3.映射層(塊裝置檔案系統)(1)把檔案拆分成大小相同的塊,每一個塊都有一個邏輯號(2)訪問檔案的磁碟節點,根據每一塊的邏輯塊號,確定這塊資料的在磁碟上的
Time of Update: 2018-12-04
#include <iostream>#include <queue>using namespace std;//有向圖的鄰接表typedef struct v{int vex;//終點的序號v *next;//與這條有向邊具有相同起點的其它有向邊}V;//邊結點typedef struct h{int indegree;//入度v *next;//指向((從該節點出發的有向邊的)邊結點所組成的單鏈表)}H;//頭結點H team[10010];V *p;int
Time of Update: 2018-12-04
一、題目寫一個O(n)時間的非遞迴過程,輸出給定的含n個結點的二叉樹中每個結點的關鍵字。要求只能用除樹本身以外的固定量的額外儲存空間,而且在過程中不能修改該樹,哪怕是暫時的二、思考採用類似中序遍曆的處理方法,對一個結點,可以分為以下幾種情況1.從父結點進入子結點進行處理(1)如果有左孩子,就處理左孩子(2)返回到自己(3)訪問自己(4)如果有右孩子,就處理右孩子(5)返回到自己的父結點2.從左孩子返回,說明左孩子已經處理過,自己還沒訪問,自己的右孩子也沒有處理過,就進行1-(2)3.從右孩子返回
Time of Update: 2018-12-04
一、綜述1.minimum-spanning-tree problem2.Kruskal's algorithmIn Kruskal's algorithm, the set A is a forest. The safe edge added to A is always a least-weight edge in the graph that connects two distinct components.3.Prim's algorithmIn Prim's algorithm,
Time of Update: 2018-12-04
題意:一個由0..n-1組成的序列,每次可以把隊首的元素移到隊尾,求形成的n個序列最小逆序對數目演算法:由樹狀數組求逆序對。加入元素i即把以元素i為下標的a[i]值+1,從隊尾到隊首入隊,每次入隊時逆序對數 += getsum(i -
Time of Update: 2018-12-04
題意:一個由0..n-1組成的序列,每次可以把隊首的元素移到隊尾, 求形成的n個序列最小逆序對數目演算法:將元素依次插入線段樹,每次增加的逆序對數為比它大的已經插入的 數的個數,可以用線段樹維護,由於元素值為0..n,每次移動可求出增減 逆序對的數量更新。#include <stdio.h>#define MAXN 100000#define ROOT 1struct node{ int left,right,sum;}t[