《Java集合并交差运算.docx》由会员分享,可在线阅读,更多相关《Java集合并交差运算.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品word 可编辑资料 - - - - - - - - - - - - -一、题目要求:用 Java 语言实现单链表的基本操作,并实现集合的交、并和差运算;二、程序功能定义:1、输出两个集合的交集,即找出两个集合的相同元素;2、输出两个集合的并集,即把两个集合的全部元素不重复的加起来;3、输出两个集合的差集,即从一个集合中找出另一个集合里没有的元素;三、设计思路:程序 1: 单链表结点public class Node/单链表结点类,T 指定结点的元素类型public T data;/数据域,储存数据元素public Node next;/ 地址域,引用后继结点public Node(T d
2、ata, Node next)/构造结点, data 指定数据元素, next 指定后继结点this.data = data; this.next = next;public Node()this(null, null);程序 2:import java.util.ArrayList; public class SinglyList第 1 页,共 7 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -public Node head; public int length;/以上为默认构造方法,构造空单链表public stat
3、ic ArrayList union=new ArrayList(); public SinglyList()this.head = new Node();/以上为构造单链表public SinglyList(T element)this();/创建空单链表,只有头结点 this.length = element.length;Node rear = this.head;/rear 指向单链表最终一个结点for (int i = 0; i element.length; i+)/如 element=null ,跑出空对象反常;element.length=0 时,构造空链表rear.next
4、= new Node(elementi, null);/ 创建结点链入rear 结点之后rear = rear.next;/rear 指向性的链尾结点public String toString()String str = (;Node p = this.head.next; while (p .= null)str += p.data.toString(); if (p.next .= null)第 2 页,共 7 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -str += ,;/ 不是最终一个结点时,后加分隔符 p =
5、 p.next;return str + );/ 空表返回 ()public String addAll(SinglyList list)Node p = this.head.next; String str = (;while (p .= null)Node q = list.head.next; while (q .= null)if ( p.data.toString().equals(q.data.toString()/集合的元素值相等if (.str.equals()str += ,;/ 用逗号间隔str += p.data.toString(); this.union.add(p.
6、data.toString() ;q = q.next;p = p.next;第 3 页,共 7 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -return str + );/以上为求交集过程;public String union(SinglyList list)Node p = this.head.next; String str = (;while (p .= null)Node q = list.head.next; int i = 0;while (q .= null)if (.p.data.toString()
7、.equals(q.data.toString()i+;if (i = list.length)for(int a=0;aunion.size();a+)if( .p.data.toString().equals(union.get(a)&a=union.size()-1)if (.str.equals() str += ,; str += p.data.toString();q = q.next;第 4 页,共 7 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -p = p.next; i = 0;Node w = lis
8、t.head.next; while (w .= null)str += ,;str += w.data.toString(); w = w.next;return str + );/以上为求并集过程;public String difference(SinglyList list)Node p = this.head.next; String str = (;while (p .= null)Node q = list.head.next; int i = 0;while (q .= null)if ( .p.data.toString().equals(q.data.toString()i
9、+;if (i = list.length)if (.str.equals() str += ,; str += p.data.toString();第 5 页,共 7 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -q = q.next;p = p.next; i = 0;return str + );/以上为求差集过程;程序 3:import java.util.Scanner; public class MainClasspublic static void main(String args)int a, b;Scan
10、ner cin = new Scanner(System.in); System.out.print( 请输入集合A 的元素(用英文逗号间隔): ); String a_string=cin.nextLine();String suma=a_string.split(,);System.out.print( 请输入集合B 的元素(用英文逗号间隔): ); String b_string=cin.nextLine();String sumb=b_string.split(,);SinglyList list1 = new SinglyList(suma); SinglyList list2 =
11、new SinglyList(sumb);System.out.println( 集合 A 和集合 B 的交集为: +list1.addAll(list2);System.out.println( 集合 A 和集合 B 的并集为: +list1.union(list2);第 6 页,共 7 页 - - - - - - - - - -精品word 可编辑资料 - - - - - - - - - - - - -System.out.println(A与 B 的差集为: +list1.difference(list2);System.out.println(B与 A 的差集为: +list2.difference(list1);四、程序运行输出图:第 7 页,共 7 页 - - - - - - - - - -