【练习3.15】

a.写出自调整表的数组实现。自调整表如同一个规则的表,但是所有的插入都在表头进行。

当一个元素被Find访问时,它就被移到表头而并不改变其余的项的相对顺序。

b.写出自调整表的链表实现

c.设每个元素都有其被访问的固定概率pi。证明那些具有最高访问概率的元素都靠近表头。

 

Answer:

a简单得令人发指,所以不写了。

b只需要在原链表上加一个自适应的Find访问版本find_selfadj就行,很简单,如下代码。

c在摊还分析那里会频繁遇到的,这儿超纲了。

 

测试代码:

 1 #include <iostream>
 2 #include "linklist.h"
 3 using namespace std;
 4 using namespace linklist;
 5 template class List<int>;
 6 int main(void)
 7 {
 8     List<int> number;
 9 
10     //测试插入
11     cout << "/*additem()*/" << endl;
12     number.additem(2);
13     number.additem(3);
14     number.additem(5);
15     number.additem(7);
16     number.additem(11);
17     number.additem(13);
18     number.traverse();
19     cout << "\n/*end*/\n\n" << flush;
20 
21     number.find_selfadj(13);
22     number.traverse();
23     cout << "\n/*end*/\n\n" << flush;
24 
25     number.find_selfadj(7);
26     number.traverse();
27     cout << "\n/*end*/\n\n" << flush;
28     
29     system("pause");
30 }
View Code

相关文章:

  • 2021-10-16
  • 2021-07-24
  • 2021-11-25
  • 2021-05-29
  • 2021-11-24
  • 2021-09-19
  • 2022-01-18
猜你喜欢
  • 2021-10-26
  • 2022-01-19
  • 2021-10-08
  • 2022-02-04
  • 2021-11-23
  • 2022-01-25
  • 2021-07-08
相关资源
相似解决方案