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<E> { <font color=#8000a0><font color=#8000a0>protected</font> </font>PositionList<Entry<E>> 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<Entry<E>><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<Entry<E>> 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<Entry<E>> 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<E><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<Entry<E>> <font color=#0000ff>find</font>(E obj) { <font color=#ff8000>for</font><font color=#0000ff> </font>(Position<Entry<E>> 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<Entry<E>> cur) { Entry<E> 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<Entry<E>> prev = fList.<font color=#0000ff>prev</font>(cur); <font color=#ff0080>// previous position</font> <font color=#ff8000>if</font><font color=#0000ff> </font>(c <= <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 + -
显示快捷键?