结点类
package DataStructures;
![](/Images/OutliningIndicators/None.gif)
class CursorNode {
// Friently data;accessible by other package routines
Object element;
![](/Images/OutliningIndicators/InBlock.gif)
int next;
![](/Images/OutliningIndicators/InBlock.gif)
// Constructers
CursorNode(Object theElement) {
this(theElement, 0);
}
![](/Images/OutliningIndicators/InBlock.gif)
CursorNode(Object theElement, int n) {
element = theElement;
next = n;
}
}
迭代器
package DataStructures;
![](/Images/OutliningIndicators/None.gif)
public class CursorListItr {
int current; // Current position
![](/Images/OutliningIndicators/InBlock.gif)
CursorListItr(int theNode) {
current = theNode;
}
![](/Images/OutliningIndicators/InBlock.gif)
public boolean IsPastEnd() {
return current == 0;
}
![](/Images/OutliningIndicators/InBlock.gif)
public Object Retrieve() {
return IsPastEnd() ? null : CursorList.cursorSpace[current].element;
}
![](/Images/OutliningIndicators/InBlock.gif)
public void Advance() {
if (!IsPastEnd()) {
current = CursorList.cursorSpace[current].next;
}
}
}
主类
package DataStructures;
![](/Images/OutliningIndicators/None.gif)
public class CursorList {
private int header;
![](/Images/OutliningIndicators/InBlock.gif)
static CursorNode[] cursorSpace;
![](/Images/OutliningIndicators/InBlock.gif)
private static final int SPACE_SIZE = 100;
![](/Images/OutliningIndicators/InBlock.gif)
static {
cursorSpace = new CursorNode[SPACE_SIZE];
for (int i = 0; i < SPACE_SIZE; i++) {
cursorSpace[i] = new CursorNode(null, i + 1);
}
cursorSpace[SPACE_SIZE - 1].next = 0;
}
![](/Images/OutliningIndicators/InBlock.gif)
private static int alloc() {
int p = cursorSpace[0].next;
cursorSpace[0].next = cursorSpace[p].next;
if (p == 0)
throw new OutOfMemoryError();
return p;
}
![](/Images/OutliningIndicators/InBlock.gif)
private static void free(int p) {
cursorSpace[p].element = null;
cursorSpace[p].next = cursorSpace[0].next;
cursorSpace[0].next = p;
}
![](/Images/OutliningIndicators/InBlock.gif)
public CursorList() {
header = alloc();
cursorSpace[header].next = 0;
}
![](/Images/OutliningIndicators/InBlock.gif)
public boolean IsEmpty() {
return cursorSpace[header].next == 0;
}
![](/Images/OutliningIndicators/InBlock.gif)
/**
* Make the list logically empty.
*/
public void MakeEmpty() {
while (!IsEmpty())
Remove(First().Retrieve());
}
![](/Images/OutliningIndicators/InBlock.gif)
public CursorListItr Zeroth() {
return new CursorListItr(header);
}
![](/Images/OutliningIndicators/InBlock.gif)
public CursorListItr First() {
return new CursorListItr(cursorSpace[header].next);
}
![](/Images/OutliningIndicators/InBlock.gif)
/**
* Return iterator corresponding to the first node containing an tiem.
*
* @param x
* the item to search for
* @return an iterator;iterator IsPastEnd if item is not found.
*/
public CursorListItr Find(Object x) {
int itr = cursorSpace[header].next;
![](/Images/OutliningIndicators/InBlock.gif)
while (itr != 0 && cursorSpace[itr].element.equals(x))
itr = cursorSpace[itr].next;
![](/Images/OutliningIndicators/InBlock.gif)
return new CursorListItr(itr);
}
![](/Images/OutliningIndicators/InBlock.gif)
/**
* Insert after p.
*
* @param x
* the item to insert.
* @param p
* the position prior to the newly inserted item.
*/
public void Insert(Object x, CursorListItr p) {
if (p != null && p.current != 0) {
int pos = p.current;
int tmp = alloc();
![](/Images/OutliningIndicators/InBlock.gif)
cursorSpace[tmp].element = x;
cursorSpace[tmp].next = cursorSpace[pos].next;
cursorSpace[pos].next = tmp;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
/**
* Remove the first occurence of an item.
*
* @param x
* the item to remove.
*/
public void Remove(Object x) {
CursorListItr p = FindPrevious(x);
int pos = p.current;
![](/Images/OutliningIndicators/InBlock.gif)
if (cursorSpace[pos].next != 0) {
int tmp = cursorSpace[pos].next;
cursorSpace[pos].next = cursorSpace[tmp].next;
free(tmp);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
/**
* Return iterator prior to the first node containing an item.
*
* @param x
* the item to search for.
* @return appropriate iterator if the item is found. Otherwise, the
* iterator corresponding to the last element in the list is
* returned.
*/
public CursorListItr FindPrevious(Object x) {
int itr = header;
![](/Images/OutliningIndicators/InBlock.gif)
while (cursorSpace[itr].next != 0
&& !cursorSpace[cursorSpace[itr].next].element.equals(x))
itr = cursorSpace[itr].next;
![](/Images/OutliningIndicators/InBlock.gif)
return new CursorListItr(itr);
}
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
迭代器
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
主类
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)