Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 352|回复: 0

[算法学习]java数据结构:链表与迭代器入门程序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-30 23:59:32 | 显示全部楼层 |阅读模式
    链表与迭代器入门实例
       
    1. // interIterator.java
    2. // demonstrates iterators on a linked listListIterator
    3. // to run this program: C>java InterIterApp
    4. import java.io.*;                 // for I/O
    5. //节点类
    6. class Link
    7.    {
    8.    public long dData;             // 节点中的数据
    9.    public Link next;              // 在链表中的下一个节点
    10.    public Link(long dd)           // 节点类的构造函数
    11.       { dData = dd; }
    12.    public void displayLink(){      // 显示节点
    13.       System.out.print(dData + " ");
    14.     }
    15.    }  
    16. //链表类
    17. class LinkList
    18.    {
    19.    private Link first;            // 链表中的头节点
    20.    public LinkList()              // 构造方法
    21.       { first = null; }           // 链表中还没有数据
    22.    public Link getFirst()         // 获取第一个节点
    23.       { return first; }
    24.    public void setFirst(Link f)   // 把头节点设置到一个新的节点
    25.       { first = f; }
    26.    public boolean isEmpty()       // 如果链表是空,则返回true
    27.       { return first==null; }
    28.    public ListIterator getIterator()  // 获取这个链表的迭代器
    29.       {
    30.       return new ListIterator(this);  // 用这个链表初始化迭代器
    31.       }   
    32.                            
    33.    public void displayList()       //显示链表中的所有数据
    34.       {
    35.       Link current = first;       // 指向链表的头节点
    36.       while(current != null)      // 循环到链表的最后一个节点
    37.          {
    38.          current.displayLink();   // 输出数据
    39.          current = current.next;  // 指向下一个节点
    40.          }
    41.       System.out.println("");
    42.       }
    43.    }  // end class LinkList
    44. //迭代器类
    45. class ListIterator
    46.    {
    47.    private Link current;          // 迭代器的当前节点
    48.    private Link previous;         // 迭代器的前一个节点
    49.    private LinkList ourList;      // 要迭代的链表
    50.    public ListIterator(LinkList list) // 迭代器的构造方法
    51.       {
    52.       ourList = list;
    53.       reset();
    54.       }
    55.    public void reset()      // 迭代器的当前节点指向链表的头节点
    56.       {
    57.       current = ourList.getFirst();
    58.       previous = null;
    59.       }
    60.    public boolean atEnd()
    61.     // 如果迭代器的当前节点的下一个节点为null,表示到达链表末
    62.       { return (current.next==null); }
    63.    public void nextLink()  // 将迭代器的当前节点指向自己的下一个节点
    64.       {
    65.       previous = current;
    66.       current = current.next;
    67.       }
    68.    public Link getCurrent()       // 获取迭代器的当前节点
    69.       { return current; }
    70.    public void insertAfter(long dd) // 在迭代器的当前节点后面插入节点
    71.       {                                
    72.       Link newLink = new Link(dd);  //要插入的新节点
    73.       if( ourList.isEmpty() )     // 如果链表为空
    74.          {
    75.          ourList.setFirst(newLink);//将新节点设为链表的头节点
    76.          current = newLink;       //迭代器的当前节点指向链表的头节点
    77.          }
    78.       else                        // 链表非空
    79.          {
    80.          //新节点的下一个节点指向迭代器当前节点的下一个节点
    81.          newLink.next = current.next;
    82.          current.next = newLink;  //迭代器当前节点的下一个节点指向新节点
    83.          nextLink();              // 迭代器的当前节点指向新节点
    84.          }
    85.       }
    86.    public void insertBefore(long dd)  // 在迭代器的当前节点前面插入节点
    87.       {                                
    88.       Link newLink = new Link(dd);
    89.       if(previous == null)        // beginning of list
    90.          {                        // (or empty list)
    91.          newLink.next = ourList.getFirst();
    92.          ourList.setFirst(newLink);
    93.          reset();
    94.          }
    95.       else                        // not beginning
    96.          {
    97.          newLink.next = previous.next;
    98.          previous.next = newLink;
    99.          current = newLink;
    100.          }
    101.       }
    102.    public long deleteCurrent()    // 删除迭代器的当前节点
    103.       {
    104.       long value = current.dData;
    105.       if(previous == null)    // 如果迭代器的当前节点指向链表的头节点
    106.          {
    107.          ourList.setFirst(current.next);
    108.          reset();
    109.          }
    110.       else                // 迭代器的当前节点没有指向链表的头节点
    111.          {
    112.          previous.next = current.next;
    113.          if( atEnd() )//链表只有两个节点的情况
    114.             reset();
    115.          else
    116.             current = current.next;
    117.          }
    118.       return value;
    119.       }
    120.    }  // end class ListIterator

    121. //测试类
    122. class InterIterApp
    123.    {
    124.    public static void main(String[] args) throws IOException
    125.       {
    126.       LinkList theList = new LinkList();           // new list
    127.       ListIterator iter1 = theList.getIterator();  // new iter
    128.       long value;
    129.       iter1.insertAfter(20);             // insert items
    130.       iter1.insertAfter(40);
    131.       iter1.insertAfter(80);
    132.       iter1.insertBefore(60);
    133.       while(true)
    134.          {
    135.          System.out.print("Enter first letter of show, reset, ");
    136.          System.out.print("next, get, before, after, delete: ");
    137.          System.out.flush();
    138.          int choice = getChar();         // get user"s option
    139.          switch(choice)
    140.             {
    141.             case "s":                    // 显示链表中的数据
    142.                if( !theList.isEmpty() )
    143.                   theList.displayList();
    144.                else
    145.                   System.out.println("List is empty");
    146.                break;
    147.             case "r":          // 将迭代器的当前节点指向链表的头节点
    148.                iter1.reset();
    149.                break;
    150.             case "n":          // 迭代器的当前节点指向它的下一个节点
    151.                if( !theList.isEmpty() && !iter1.atEnd() )
    152.                   iter1.nextLink();
    153.                else
    154.                   System.out.println("Can"t go to next link");
    155.                break;
    156.             case "g":                    // 输出迭代器当前节点
    157.                if( !theList.isEmpty() )
    158.                   {
    159.                   value = iter1.getCurrent().dData;
    160.                   System.out.println("Returned " + value);
    161.                   }
    162.                else
    163.                   System.out.println("List is empty");
    164.                break;
    165.             case "b":                    // 在迭代器当前节点前插入节点
    166.                System.out.print("Enter value to insert: ");
    167.                System.out.flush();
    168.                value = getInt();
    169.                iter1.insertBefore(value);
    170.                break;
    171.             case "a":                    // 在迭代器当前节点后插入节点
    172.                System.out.print("Enter value to insert: ");
    173.                System.out.flush();
    174.                value = getInt();
    175.                iter1.insertAfter(value);
    176.                break;
    177.             case "d":                    // 删除当前节点
    178.                if( !theList.isEmpty() )
    179.                   {
    180.                   value = iter1.deleteCurrent();
    181.                   System.out.println("Deleted " + value);
    182.                   }
    183.                else
    184.                   System.out.println("Can"t delete");
    185.                break;
    186.             default:
    187.                System.out.println("Invalid entry");
    188.             }  // end switch
    189.          }  // end while
    190.       }  // end main()
    191.    public static String getString() throws IOException
    192.       {
    193.       InputStreamReader isr = new InputStreamReader(System.in);
    194.       BufferedReader br = new BufferedReader(isr);
    195.       String s = br.readLine();
    196.       return s;
    197.       }
    198.    public static char getChar() throws IOException
    199.       {
    200.       String s = getString();
    201.       return s.charAt(0);
    202.       }
    203.    public static int getInt() throws IOException
    204.       {
    205.       String s = getString();
    206.       return Integer.parseInt(s);
    207.       }
    208.    }  // end class InterIterApp
    209. ////////////////////////////////////////////////////////////////
    210.                                             
    复制代码

       
      
       
       

         
       

         
       
      
      
      
       
      
      程序运行结果: C:java>java InterIterApp
    Enter first letter of show, reset, next, get, before, after, delete: s
    20 40 60 80
    Enter first letter of show, reset, next, get, before, after, delete: n
    Enter first letter of show, reset, next, get, before, after, delete: s
    20 40 60 80
    Enter first letter of show, reset, next, get, before, after, delete: n
    Can"t go to next link
    Enter first letter of show, reset, next, get, before, after, delete: g
    Returned 80
    Enter first letter of show, reset, next, get, before, after, delete: n
    Can"t go to next link
    Enter first letter of show, reset, next, get, before, after, delete: r
    Enter first letter of show, reset, next, get, before, after, delete: s
    20 40 60 80
    Enter first letter of show, reset, next, get, before, after, delete: n
    Enter first letter of show, reset, next, get, before, after, delete: g
    Returned 40
    Enter first letter of show, reset, next, get, before, after, delete: n
    Enter first letter of show, reset, next, get, before, after, delete: g
    Returned 60
    Enter first letter of show, reset, next, get, before, after, delete: n
    Enter first letter of show, reset, next, get, before, after, delete: g
    Returned 80
    Enter first letter of show, reset, next, get, before, after, delete: b
    Enter value to insert: 90
    Enter first letter of show, reset, next, get, before, after, delete: s
    20 40 60 90 80
    Enter first letter of show, reset, next, get, before, after, delete: d
    Deleted 90
    Enter first letter of show, reset, next, get, before, after, delete: s
    20 40 60 80
    Enter first letter of show, reset, next, get, before, after, delete: s
    20 40 60 80
    Enter first letter of show, reset, next, get, before, after, delete:

      
      
       
       

         
       

         
       
      


      










    源码下载:http://file.javaxxz.com/2014/10/30/235932484.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 00:15 , Processed in 0.385070 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表