数据结构代码-简单链表

来源:互联网 发布:什么软件借钱最快 编辑:程序博客网 时间:2024/05/22 14:49
/** * 简单链表节点 */package linklist;/** *  */public class Link {int iData;double dData;public Link next;public Link(int iData, double dData) {this.iData = iData;this.dData = dData;next = null;}public void displayLink() {System.out.println("{" + iData + "," + dData + "}");}}
/** * 简单链表数据结构 */package linklist;/** *  */public class LinkList{    private Link first;        public LinkList()    {        first = null;    }        /**     * 判断链表是否为空     *      * @return     */    public boolean isEmpty()    {        return first == null;    }        /**     * 在链表头部插入元素     *      * @param iData     * @param dData     */    public void insertFirst(int iData, double dData)    {        Link link = new Link(iData, dData);        link.next = first;        first = link;    }        /**     * 在链表头部删除元素     *      * @return     * @throws EmptyLinkListException     */    public Link deleteFirst()        throws EmptyLinkListException    {        if (isEmpty())        {            throw new EmptyLinkListException();        }        else        {            Link temp = first;            first = first.next;            return temp;        }    }        /**     * 查找指定关键字的节点     *      * @param key     * @return     */    public Link find(int key)    {        Link current = first;        while (current != null)        {            if (key == current.iData)            {                break;            }            else            {                current = current.next;            }        }        return current;    }        /**     * 删除指定关键字的节点     *      * @param key     * @return     * @throws EmptyLinkListException     */    public Link delete(int key)        throws EmptyLinkListException    {        if (isEmpty())        {            throw new EmptyLinkListException();        }        else if (first.iData == key)        {// 要找的元素在首节点            return deleteFirst();        }        else        {            Link current = first.next;            Link previous = first;            while (current != null)            {                if (current.iData == key)                {                    previous.next = current.next;                    break;                }                previous = current;                current = current.next;            }            return current;        }    }        /**     * 按照整型key升序插入元素,规则为大于前一个元素,小于或者等于后一个元素     * @see [类、类#方法、类#成员]     */    public void insertByAscend(int iData, double dData)    {        Link link = new Link(iData, dData);        //如果链表为空,或键值比表头还小也做表头        if (isEmpty() || iData <= first.iData)        {            link.next = first;            first = link;        }        else        {            Link current = first;            Link next = current.next;            while (iData > current.iData)            {                if (next == null || iData <= next.iData)                {                    link.next = current.next;                    current.next = link;                    break;                }                current = next;                next = current.next;            }        }    }        /**     * 遍历链表     */    public void displayList()    {        Link current = first;        while (current != null)        {            current.displayLink();            current = current.next;        }    }        /**     * 返回首元素     * @return     * @see [类、类#方法、类#成员]     */    public Link getFirst()    {        return first;    }}
/** * 简单链表测试类 */package linklist;/** *  */public class LinkListTest {/** * @param args */public static void main(String[] args) {LinkList linkList = new LinkList();linkList.insertFirst(1, 1.1);linkList.insertFirst(2, 2.2);linkList.insertFirst(3, 3.3);try {linkList.delete(3);linkList.displayList();} catch (EmptyLinkListException e) {e.printStackTrace();}}}