favoritelist-favorites.html

来自「经典的数据结构源代码(java 实现)」· HTML 代码 · 共 59 行

HTML
59
字号
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre><font color = #ff0080>/** List of favorite elements, with their access counts. */</font><font color=#8000a0>public</font> <font color=#8000a0><font color=#ff8000>class</font> </font>FavoriteList&lt;E&gt; {  <font color=#8000a0><font color=#8000a0>protected</font> </font>PositionList&lt;Entry&lt;E&gt;&gt; fList;	<font color=#ff0080>// List of entries</font>  <font color = #ff0080>/** Constructor; O(1) time */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#0000ff>FavoriteList</font>() { fList = <font color=#8000a0><font color=#ff8000>new</font> </font>NodePositionList&lt;Entry&lt;E&gt;&gt;<font color=#0000ff></font>(); }  <font color = #ff0080>/** Returns the number of elements in the list; O(1) time */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>int</font> <font color=#0000ff>size</font>() { <font color=#8000a0><font color=#ff8000>return</font> </font>fList.<font color=#0000ff>size</font>(); }  <font color = #ff0080>/** Returns whehter the list is empty; O(1) time */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>boolean</font> <font color=#0000ff>isEmpty</font>() { <font color=#8000a0><font color=#ff8000>return</font> </font>fList.<font color=#0000ff>isEmpty</font>(); }  <font color = #ff0080>/** Removes a given element, provided it is in the list; O(n) time */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>void</font> <font color=#0000ff>remove</font>(E obj) {    Position&lt;Entry&lt;E&gt;&gt; p = <font color=#0000ff>find</font>(obj);	<font color=#ff0080>// search for obj</font>    <font color=#ff8000>if</font><font color=#0000ff> </font>(p != null)      fList.<font color=#0000ff>remove</font>(p);		<font color=#ff0080>// remove the entry</font>    }  <font color=#ff0080>/** Increments the access count for the given element and inserts it    * if it is not already present; O(n) time */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>void</font> <font color=#0000ff>access</font>(E obj) {    Position&lt;Entry&lt;E&gt;&gt; p = <font color=#0000ff>find</font>(obj);	<font color=#ff0080>// find the position of obj</font>    <font color=#ff8000>if</font><font color=#0000ff> </font>(p != null)      p.<font color=#0000ff>element</font>().<font color=#0000ff>incrementCount</font>();	<font color=#ff0080>// increment access count</font>    <font color=#ff8000>else</font> {      fList.<font color=#0000ff>addLast</font>(<font color=#ff8000>new</font> Entry&lt;E&gt;<font color=#0000ff></font>(obj));	<font color=#ff0080>// add the new entry at the end</font>      p = fList.<font color=#0000ff>last</font>();    }    <font color=#0000ff>moveUp</font>(p); 		<font color=#ff0080>// moves the entry to its final position</font>    }  <font color = #ff0080>/** Finds the position of a given element, or returns null; O(n) time */</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font>Position&lt;Entry&lt;E&gt;&gt; <font color=#0000ff>find</font>(E obj) {    <font color=#ff8000>for</font><font color=#0000ff> </font>(Position&lt;Entry&lt;E&gt;&gt; p: fList.<font color=#0000ff>positions</font>())      <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>value</font>(p).<font color=#0000ff>equals</font>(obj)) 	<font color=#8000a0><font color=#ff8000>return</font> </font>p;	<font color=#ff0080>// fount at position p</font>    <font color=#8000a0><font color=#ff8000>return</font> </font>null;	<font color=#ff0080>// not found</font>  }  <font color = #ff0080>/** Moves up an entry to its correct position in the list;  O(n) time */</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>moveUp</font>(Position&lt;Entry&lt;E&gt;&gt; cur) {    Entry&lt;E&gt; e = cur.<font color=#0000ff>element</font>();    <font color=#8000a0><font color=#8000a0>int</font> </font>c = <font color=#0000ff>count</font>(cur);    <font color=#ff8000>while</font><font color=#0000ff> </font>(cur != fList.<font color=#0000ff>first</font>()) {      Position&lt;Entry&lt;E&gt;&gt; prev = fList.<font color=#0000ff>prev</font>(cur);	<font color=#ff0080>// previous position</font>      <font color=#ff8000>if</font><font color=#0000ff> </font>(c &lt;=  <font color=#0000ff>count</font>(prev)) <font color=#ff8000>break</font>;	<font color=#ff0080>// entry is at correct position</font>      fList.<font color=#0000ff>set</font>(cur, prev.<font color=#0000ff>element</font>());	<font color=#ff0080>// move down previous entry</font>      cur = prev;    }    fList.<font color=#0000ff>set</font>(cur, e);	<font color=#ff0080>// store the entry in its final position</font>  }</dl></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?