freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結(jié)構(gòu)3清華大學(xué)ppt-資料下載頁(yè)

2025-01-20 06:34本頁(yè)面
  

【正文】 ?????????nnnnnnnnhnA S Lhs u c c可以用歸納法證明 這樣,由 2h = n+1, h = log2(n+1) )223222(11 1210 hs u c c hnAS L ????????? ?87 有序鏈表的類定義 include template class E, class K struct ChainNode { //鏈表結(jié)點(diǎn)類定義 E data。 ChainNodeE, K *link。 ChainNode() : link (NULL) { }。 //構(gòu)造函數(shù) ChainNode (Eamp。 e1, //構(gòu)造函數(shù) ChainNodeE,K *next = NULL) : data (e1), link (next) { }。 }。 88 template class E, class K class SortedChain { //有序鏈表類定義 public: SortedChain () { //構(gòu)造函數(shù) first = new ChainNodeE, K。 assert (first != NULL)。 }。 ~ SortedChain ()。 //析構(gòu)函數(shù) ChainNodeE, K *Search (K k1)。 //搜索 void Insert (const K k1, Eamp。 e1)。 //插入 bool Remove (const K k1, Eamp。 e1)。 //刪除 89 ChainNodeE, K *Begin () { return firstlink。 } //定位第一個(gè) ChainNodeE, K *Next (ChainNodeE, K *current) const { //定位下一個(gè) if (current != NULL) return currentlink。 else return NULL。 } private: ChainNodeE, K *first。 //鏈表的頭指針 }。 90 搜索、插入與刪除算法 template class E, class K ChainNodeE, K *SortedChainT:: Search (const K k1) const { ChainNodeE, K *p = firstlink。 while (p != NULL amp。amp。 pdata k1) p = plink。 //重載:元素判小于 if ( p != NULL amp。amp。 pdata == k1) return p。 //重載:元素判等于 else return NULL。 }。 91 template class E, class K void SortedChainE, K:: Insert (const K k1, Eamp。 e1) { ChainNodeE, K *p = firstlink, *pre = first; ChainNodeE, K *newNode。 while (p != NULL amp。amp。 pdata = k1) //重載:元素判小于等于 { pre = p。 p = plink。 } //尋找插入位置 if (p != NULL amp。amp。 pdata == k1) pdata = e1。 else { newNode = new ChainNodeE, K(e1)。 if (newNode == NULL) { 92 cerr “存儲(chǔ)分配失敗 !” endl。 exit (1)。 } newNodelink = p。 prelink = newNode。 } }。 template class E, class K bool SortedChainE, K:: Remove (const K k1, Eamp。 e1) { ChainNodeE, K *p = firstlink, *pre = first; while (p != NULL amp。amp。 pdata k1) 93 { pre = p。 p = plink。 } //尋找刪除位置 if (p != NULL amp。amp。 pdata == k1) { //重載:元素關(guān)鍵碼判等于 prelink = plink。 e1 = pdata。 delete p。 return true。 } else return false。 //未找到刪除結(jié)點(diǎn) }。 94 鏈表中的操作符重載 class person { friend void main (void)。 private: long key。 //關(guān)鍵碼 other。 //其他數(shù)據(jù) public: long getKey() { return key。 } //提取元素關(guān)鍵碼 personamp。 operator = (long k1) { key = k1。 return *this。 } //關(guān)鍵碼賦值給元素 95 bool operator (long k1) { return key k1。 } //元素與關(guān)鍵碼判小于 bool operator == (long k1) { return key == k1。 } //元素與關(guān)鍵碼判等于 bool operator != (long k1) { return key != k1。 } //元素與關(guān)鍵碼判不等 bool operator (personamp。 pr2) { return key ()。 } //元素之間判小于 96 bool operator == (personamp。 pr2) { return key == 。 } //元素之間判等于 bool operator = (personamp。 pr2) { return key = 。 } //元素間判小于等于 }。 97 跳表( skip list) ? 由前面討論可知,在一個(gè)有序順序表中進(jìn)行折半搜索,時(shí)間效率很高。但是在有序鏈表中進(jìn)行搜索,只能順序搜索,需要執(zhí)行 O(n)次關(guān)鍵碼比較。 ? 如果在鏈表中部結(jié)點(diǎn)中增加一個(gè)指針,則比較次數(shù)可以減少到 n/2+1。在搜索時(shí),首先用要搜索元素與中間元素進(jìn)行比較,如果要搜索元素小于中間元素,則僅需搜索鏈表的前半部分,否則只要在鏈表的后半部分進(jìn)行比較即可。 98 跳表的結(jié)構(gòu) (a) 帶有表頭結(jié)點(diǎn)和表尾結(jié)點(diǎn)的有序鏈表 (b) 在鏈表中部增加一個(gè)鏈接指針 (c) 在前半部分和后半部分中部各增加一個(gè)鏈接指針 10 20 30 40 50 60 70 10 20 30 40 50 60 70 10 20 30 40 50 60 70 99 ? 在上面跳表的例子中有三條鏈: 0 級(jí)鏈 就是圖(a)中的初始鏈表,包括了所有 7個(gè)元素。 1 級(jí)鏈 包括 6 三個(gè)元素。 2 級(jí)鏈 只包括第 4 個(gè)元素。 ? 為了搜索值為 30 的元素,首先搜索 2 級(jí)鏈,與中間元素 40 進(jìn)行比較,在 2 級(jí)鏈中只需比較 1次。由于 30 40,下一步將搜索鏈表前半部分的中間元素,在 1 級(jí)鏈也僅需比較 1 次。由于 30 20,可到 0 級(jí)鏈繼續(xù)搜索,與鏈表中元素進(jìn)行比較。 ? 搜索 時(shí)間代價(jià)為 O(log2n)。 100 ? 圖 (c)就是跳表,有一組分層的鏈, 0級(jí)鏈 是包含所有元素的有序鏈表,有 n個(gè)元素。 ? 0 級(jí)鏈的第 21, 2?21, 3?21, ?個(gè)結(jié)點(diǎn)鏈接起來形成 1級(jí)鏈 ,故 1級(jí)鏈?zhǔn)?0級(jí)鏈的子集。 ? 1 級(jí)鏈的第 22, 2?22, 3?22, ?個(gè)結(jié)點(diǎn)鏈接起來形成 2級(jí)鏈 ,依此類推, 第 i級(jí)鏈 所包含的元素是第 i1級(jí)鏈 的子集。 ? 一個(gè)有 n個(gè)元素的跳表理想情況下的鏈級(jí)數(shù)為?log2n?,即跳表的最高級(jí)數(shù)為 ?log2n?1。 ? 若一個(gè)元素在 0~ i級(jí)鏈上,而不在 i+1級(jí)鏈(如果存在)上時(shí),就可稱該元素是 i級(jí)鏈元素。 101 跳表的類定義 include const int DefaultSize = 100。 template class E, class K struct SkipNode { //跳表結(jié)點(diǎn)類定義 E data。 //數(shù)據(jù)域 SkipNodeE,K **link。 //指針數(shù)組域 SkipNode (int size = defaultSize) { //構(gòu)造函數(shù) link = new SkipNodeE, K *[size]。 if (link = NULL) {cerr “存儲(chǔ)分配失敗!” endl。 exit(1)。} } 102 ~ SkipNode() { delete [] link。 } //析構(gòu)函數(shù) }。 const template class E, class K class SkipList { //跳表類定義 private: int maxLevel。 //所允許的最大級(jí)數(shù) int Levels。 //當(dāng)前非空鏈的級(jí)數(shù) K TailKey。 //其中存有一個(gè)大值 SkipNodeE, K *head。 //表頭結(jié)點(diǎn) SkipNodeE, K *tail。 //表尾結(jié)點(diǎn) SkipNodeE, K **last。 //指針數(shù)組 int level()。 103 SkipNodeE, K *SaveSearch (K k1)。 public; SkipList (K large, int maxLev = defaultSize)。 ~ SkipList()。 //析構(gòu)函數(shù) bool Search (K k1, Eamp。 e1) const。 //搜索函數(shù) Eamp。 getData (SkipNodeE, K *current) { if (current != NULL) return amp。currentdata。 else return NULL。 } void Insert (K k1, Eamp。 e1)。 //插入函數(shù) bool Remove (K k1, Eamp。 e1)。 //刪除函數(shù) }。 104 跳表的構(gòu)造函數(shù)和析構(gòu)函數(shù) template class E, class K SkipListE, K::SkipList (K large, int maxLev) { //構(gòu)造函數(shù):建立空的多級(jí)鏈 maxLevel = maxLev。 //最大級(jí)鏈數(shù)目 TailKey = large。 //控制掃描的最大關(guān)鍵碼 Levels = 0。 //當(dāng)前非空鏈級(jí)數(shù)僅 0級(jí) head = new SkipNodeE, K(maxLevel+
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1