2.8.单链表上的删除操作算法
public void remove(int i) throws Exception {
Node p = head; //初始化p指向头结点,j为计数器
int j = -1;
while(p.next != null && j < i-1) { //寻找第i个结点的前驱
p = p.next;
++j;
}
if (j > i-1 || p.next == null){
throw new Exception("删除位置不合法"); //修改指针,使待删除结点从单链表中脱离出来
p.next = p.next.next;
}
3.3求链栈的长度操作算法
public int length() {
Node p = top; //初始化,p指向栈顶元素,length为计数器
int length = 0;
while (p != null) { //从栈顶元素向后查找,直到p指向空
p = p.next; //p指向后继结点
++length; //长度加1
}
return length;
}
3.4链栈的入栈操作算法
public void push(Object x) {
Node p = new Node(x); //构造一个新结点
p.next = top;
top = p; //新结点成为当前的栈顶结点
}
3.5链栈的出栈操作算法
public Object pop() {
if (isEmpty()) {
return null;
}
else {
Node p = top; //p指向被删结点(栈顶结点)
top = top.next; //修改链指针,使栈顶结点从链栈中移去
return p.data; //返回栈顶结点的数据域的值
}
}
3.6循环顺序队列的入队操作算法
public void offer(Object x) throws Exception{
if ((rear + 1) % queueElem.length == front) //队列满
throw new Exception("队列已满"); //抛出异常
else {
queueElem[rear] = x;
//x存入rear所指的数组存储位置中,使其成为新的队尾元素
rear = (rear + 1) % queueElem.length; //修改队尾指针
}
3.8 链队列的入队操作算法
public void offer(Object x) {
Node p = new Node(x); //初始化队列新结点
if (front != null){ //队列非空
rear.next = p;
rear = p; //改变队尾的位置
}
else
front = rear = p;
}