JAVA数据结构(二)

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;
}

0

评论0

请先
显示验证码
没有账号?注册  忘记密码?