线性表——循环链表和双向链表

1.循环链表:首尾相连的链表。
2.单循环链表:在单链表中,如果最后一个结点的链域值不是NULL,而是指向头结点,则整个链就形成了一个环。
3.双向链表:链表的每一个结点中有2个指针域,一个指向直接后继,一个指向直接前驱。
4.双向循环链表:将双向链表中的头结点和尾结点链接起来。
5.判断双向循环链表为空的条件:头结点的前驱和后继指针均指向了自己。
6.算法

package com.bocloud.dulnode;

/**
 * 双向循环链表
 * 
 * @author dongkai
 *
 */
public class DulNode {

    char data;
    DulNode next;
    DulNode prior;
}

package com.bocloud.dulnode;

public class Test {

    /**
     * 插入算法(在结点P之前插入S)
     * 
     * @param h
     * @param i
     * @param x
     * @return
     */
    int insert(DulNode h, int i, char x) {
        DulNode p, s;
        int j = 1;
        p = h.next;
        while (p != h && j < i) {
            j++;
            p = p.next;
        }
        if (j == i) {
            s = new DulNode();
            s.data = x;
            s.prior = p.prior;
            p.prior.next = s;
            s.next = p;
            p.prior = s;
            return 1;
        } else {
            return 0;
        }
    }

    /**
     * 删除算法(删除第i个结点P)
     * 
     * @param h
     * @param i
     * @return
     */
    char dele(DulNode h, int i) {
        char s;
        DulNode p;
        int j = 1;
        p = h.next;
        while (p != h && j < i) {
            j++;
            p = p.next;
        }
        if (j == i) {
            s = p.data;
            p.prior.next = p.next;
            p.next.prior = p.prior;
            p = null;
            return s;
        } else {
            return 0;
        }
    }
}

你可能感兴趣的:(算法与数据结构)