链表
class Node {
Object item; Node next;
Node (Object v) {
item = v; next = null;
}
}
头指针,空尾指针
初始化:head = null;
在x后插入t:
if ( x == null)
{ head = t; head.next = null; }
else { t.next = x.next; x.next = t; }
移走x之后的结点:t = x.next; x.next = t.next;
循环遍历:for ( t = head; t != null; t = t.next )
检查链表是否为空:if ( head == null )
空头结点,空尾指针
初始化:head = new Node(); head.next = null;
在x后插入t:t.next = x.next; x.next = t;
移走x之后的结点:t = x.next; x.next = t.next;
循环遍历:for ( t = head.next; t != null; t = t.next )
检查链表是否为空:if ( head.next == null )
空头结点,空尾结点
初始化:head = new Node(); z = new Node(); head.next = z; z.next = z;
在x后插入t:t.next = x.next; x.next = t;
移走x之后的结点:t = x.next; x.next = t.next;
循环遍历:for ( t = head.next; t != z; t = t.next )
检查链表是否为空:if ( head.next == z )
循环链表
第一次插入:head.next = head;
在x后插入t:t.next = x.next; x.next = t;
移走x之后的结点:t = x.next; x.next = t.next;
循环遍历:t = head; do { t = t.next; } while ( t != head );
检查是否只有一个数据项:if ( head.next == head )
堆栈
数组实现
class Stack {
private Object[] s;
private int n;
Stack ( int maxN ) {
s = new Object[maxN]; n = 0;
}
boolean isEmpty() { return ( n == 0 ); }
void push ( Object item ) { s[n++] = item; }
Object pop() {
Object t = s[--n]; s[n] = null; return t;
}
}
链表实现
class Stack {
private Node head;
private class Node {
Object item; Node next;
Node ( Object item, Node next ) {
this.item = item; this.next = next;
}
}
Stack ( Object maxN ) { head = null; }
boolean isEmpty() { return ( head ==null ); }
void push ( Object item ) { head = new Node(item, head); }
Object pop() {
Object v = head.item;
Node t = head.next;
head = t;
return v;
}
}
FIFO队列的链表实现
class Queue {
private class Node {
Object item; Node next;
Node ( Object item ) {
this.item = item; this.next = null;
}
}
Private Node head, tail;
Queue ( Object max ) { head = null; tail = null; }
boolean isEmpty() { return ( head ==null ); }
void put ( Object item ) {
Node t = tail;
tail = new Node(item);
if ( empty() )
head = tail;
else t.next = tail
}
Object get() {
Object v = head.item;
Node t = head.next;
head = t;
return v;
}
}