二. 二叉排序樹
三. 優先佇列
四. 雜湊表
提交**
讀入輸入的字串,建立一顆以指標方式儲存的二叉樹,以#表示空樹。
abc##de#g##f###
#include
#include
using
namespace std;
string s;
struct node};
node*
build
(int
& pos)
//pos不能回溯,需為引用型別
else
return
null;}
void
inorder
(node *p)
intmain()
return0;
}
也就是給定前序中序,來確定後序
提交**
#include
#include
using
namespace std;
struct node};
node*
make
(string pre,string in)
return
null;}
void
pos(node* root)
}int
main()
return0;
}
題目鏈結
#include
using
namespace std;
struct node
//剛開始忘記了初始化為null };
void
insert
(node*
&root,
int v)
else
}void
pre(node* p,
int v,
int father)
//該函式也可以寫到insert裡
pre(p-
>l,v,p-
>value)
;pre
(p->r,v,p-
>value);}
}int
main()
}}
題目鏈結
題很水,只需知道優先佇列應用於求解順序問題,優先順序高的位於佇列最前。
還有乙個要注意的是:過載運算子一定要加const!!而且要寫在括號外面!!否則會像沒定義比較函式一樣報錯,原因可能是因為非const型別物件無法在const物件上使用。
#include
#include
#include
using
namespace std;
struct complex
bool
operator
<
(complex o)
const};
intmain()
else
}else}}
}
n個帶有權值的結點構成的哈夫曼樹可能不唯一,所以有關哈夫曼樹的機試題往往考察的是求解最小帶權路徑長度和。使用優先佇列,可以高效的求出集合中權值最小的兩個元素,此時需要的是優先順序最小的元素。
求哈夫曼
權值搬水果
#include
#include
using
namespace std;
intmain()
int res=0;
while
(q.size()
>1)
cout << res << endl;
}}
魔咒詞典
對於雙向對映,當然可以用兩個map分別儲存key和value。
但如果任何key均不會等於value的情況下,可以直接存在乙個map中。即:
mp[key]
= value;
mp[value]
= key;
題目鏈結
只需想到遍歷子串的方法,在雜湊表上加一即可。
for
(int i=
0;ilength()
;i++
)}
誰是你的潛在朋友
#include
#include
using
namespace std;
intmain()
;for
(int i=
0;i) vector<
int>
::iterator it;
for(it=v.
begin()
;it!=v.
end(
);it++)}
}
機試常見的資料結構
北航的機試要求用標準c程式設計,所以很多c 的庫都沒法用。因此我使用最簡單的 實現了幾個常見的資料結構。標準c庫參考 1.陣列實現的棧。此處棧的元素預設為int,也可以改為其他。struct stack void push int x int pop bool isempty bool isfull...
資料結構與演算法常見面試題
資料結構與演算法 找到單鏈表的三等分點,如果單鏈表是有環的呢 用快慢指標,乙個走一步,乙個走三步。如果有環,先判斷環在哪,找最後乙個節點,然後用之前的無環的做法 從10萬個數中找最小的10個,時間複雜度分析 最小堆,考慮記憶體 我們首先取10萬個元素中的前10個元素來建立由10個元素組成的最小堆。這...
演算法常見資料結構
array 陣列最簡單而且應用最廣泛的資料結構之一.特性 使用連續的記憶體來儲存,陣列中的所有元素必須是相同的型別或型別的衍生 同質資料結構 元素可以通過下標直接訪問 linkedlist 鍊錶,線性表的一種,最基本,最簡單,也最為常用的資料結構.特性 元素之間的關係是一對一的關係 除了第乙個和最後...