zoukankan      html  css  js  c++  java
  • 循环单链表操作

    循环单链表操作

    1.CircleLinkList 类实现循环单链表基本操作

      1 package com.neusoft.link;
      2 import com.neusoft.List.IList;
      3 public class CircleLinkList implements IList{
      4     public Node head;
      5     public CircleLinkList() {
      6         // TODO 初始化
      7         head=new Node();//初始化头结点
      8         head.next=head;
      9     }
     10     @Override
     11     public void clear() {
     12         // TODO 清空
     13         head.next=head;
     14     }
     15     @Override
     16     public boolean isEmpty() {
     17         // TODO 判空
     18         return head.next.equals(head);
     19     }
     20     @Override
     21     public int length() {
     22         // TODO 长度
     23         Node p =head.next;
     24         int length=0;
     25         while (!p.equals(head)) {
     26             p=p.next;
     27             length++;
     28         }
     29         return length;
     30     }
     31     @Override
     32     public Object get(int i) {
     33         // TODO 读取带头结点的循环链表中第i个数据元素
     34         Node p=head.next;
     35         int j=0;
     36         while (!p.equals(head)&&j<i) {
     37             p=p.next;
     38             j++;
     39         }
     40         if (j>i||p.equals(head)) {
     41             System.out.println("第"+i+"个元素不存在!");
     42         }
     43         return p.data;
     44     }
     45 
     46     @Override
     47     public void insert(int i, Object x) {
     48         // TODO 带头结点的循环链表中第i个节点之前插入一个值为x的元素
     49         Node p = head;
     50         int j=-1;//第i个节点前驱位置
     51         while ((!p.equals(head)||j==-1)&&j<i-1) {
     52             p=p.next;
     53             j++;
     54         }
     55         if (j>i-1||(p.equals(head)&&j!=-1)) {
     56             System.out.println("插入位置不合法!");
     57         }
     58         Node s =new Node(x);
     59         s.next=p.next;
     60         p.next=s;
     61     }
     62 
     63     @Override
     64     public void remove(int i) {
     65         // TODO 移除循环单链表中第i个元素的节点,注意i的范围
     66         Node p=head;//p指向要删除节点的前驱节点
     67         int j=-1;
     68         while ((!p.next.equals(head)||j==-1)&&j<i-1) {//找前驱元素
     69             p=p.next;
     70             j++;
     71         }
     72         if (j>i-1||(p.next.equals(head)&&j!=-1)) {
     73             System.out.println("删除位置不合法!");
     74         }
     75         p.next=p.next.next;
     76     }
     77 
     78     @Override
     79     public int indexOf(Object x) {
     80         // TODO 查找值为x的元素,返回位置
     81         Node p =head.next;//p指向首节点
     82         int j=0;
     83         while ((!p.equals(head))&&(!p.data.equals(x))) {
     84             p=p.next;
     85             j++;
     86         }
     87         if (!p.equals(head)) {
     88             return j;
     89         }else {
     90             return -1;
     91         }
     92     }
     93     @Override
     94     public void display() {
     95         // TODO 输出元素
     96         Node p =head.next;
     97         while (!p.equals(head)) {
     98             System.out.print(p.data+" ");
     99             p=p.next;
    100         }
    101         System.out.println();
    102     }
    103 
    104     @Override
    105     public int remove(Object i) {
    106         // TODO Auto-generated method stub
    107         return 0;
    108     }
    109 
    110 }

     2.循环单链表的测试 

     1 package com.neusoft.link;
     2 /**
     3  * @author zhao-chj
     4  * 测试循环单链表
     5  */
     6 public class DebugCircleLinkList {
     7     public static void main(String[] args) {
     8         //-----------初始化循环链表中各个元素---------
     9         CircleLinkList L = new CircleLinkList();
    10         int n = 8;
    11         for (int i = 0; i <n ; i++) {
    12             L.insert(i, i);
    13         }
    14         System.out.println("循环链表的各个元素为:");
    15         L.display();
    16         //----------调用length()求长度-----------
    17         int length = L.length();
    18         System.out.println("循环链表长度为:"+length);
    19         //----------调用get(int i)取出第i个元素----
    20         if (L.get(2) !=null ) {
    21             System.out.println("循环链表中第2个元素为"+L.get(2));
    22         }
    23         //----------index(Object x)查找x所在的位置--------
    24         int order = L.indexOf('c');
    25         if (order!=-1) {
    26             System.out.println("c元素与的位置为" + order);
    27         }else {
    28             System.out.println("字符c不在此链表中");
    29         }
    30         //-----------调用remove(i)删除元素---------------
    31         L.remove(2);
    32         System.out.println("移除数据元素2后循环链表中的各个元素为:");
    33         L.display();
    34         //-----------调用insert(int i,Object x)插入元素------------
    35         L.insert(3,'d');
    36         System.out.println("在第3个位置上插入元素d后的显示输出为:");
    37         L.display();
    38         //----------调用L.clear()将循环链表置空------------------
    39         L.clear();
    40         System.out.println("循环链表执行了置空操作");
    41         //-----------调用isEmpty()查看循环链表是否为空------
    42         if (L.isEmpty()) {
    43             System.out.println("循环链表为空");
    44         }else {
    45             System.out.println("循环链表不为空,循环链表中各个元素为:");
    46             L.display();
    47         }
    48     }
    49 }

     

    3.测试结果

        

  • 相关阅读:
    Spring ( 二 ) IOC 依赖注入
    爬虫常见问题与解答
    Python Json模块中dumps、loads、dump、load函数介绍
    生成器和迭代器和可迭代对象
    生成器(generator)
    可迭代对象(Iterable)和迭代器(Iterator)
    Google 的 Java 编码规范,参考学习!
    HTML5和css3的总结四
    3d照片环效果(修改版--添加了x轴y轴双向转动和修复模糊度的bug)
    css3新属性的总结
  • 原文地址:https://www.cnblogs.com/jackchen-Net/p/6553595.html
Copyright © 2011-2022 走看看