java---表、栈和队列

题目2

给定两个已排序的表L1和L2,只使用基本的表操作编写
(1)计算L1与L2的交运算。
(2)计算L1与L2的并运算。

思路:
(1)求”交集”就是:“去异存同”。使用链表的迭代器Iterator,首先获得两个表中的第一个元素,itemL1和itemL2,然后调用comparaTo()方法,进行二者的比较。
如果比较结果compareResult>0,将它们其中之一添加到空链表中存储;
如果比较结果compareResult<0,因为表是有序的,所以将表L2向后遍历,更新itemL2的值,直到itemL1==itemL2;反之亦然。
(2)求”并集”就是:“删重保全”。与(1)不同之处在于:当comparaReseult > 0时,存储当前的itemL2的值,因为表是有序的,itemL1>itemL2说明,它们相等的情况只可能发生在表L2的当前元素的后面;反之亦然。

这里写代码片
//1.计算L1与L2的交运算
        public static <AnyType extends Comparable<? super AnyType>>
               void intersection(List<AnyType> L1,List<AnyType> L2,List<Anytype> Intersect )
               {
                    List<AnyType> iterL1 = L1.ListIterator();
                    List<AnyType> iterL2 = L2.ListIterator();

                    AnyType itemL1 = null,itemL2 = null;

                    //get first item in every list
                    if(iterL1.hasNext()&&iterL2.hasNext())
                    {
                        itemL1 = iterL1.next();
                        itemL2 = iterL2.next();
                    }
                    while(itemL1!=null&&itemL2!=null)
                    {
                        int compareResult = itemL1.comparaTo(itemL2);

                        if(compareResult==0)
                        {
                            Intersect.add(itemL1);

                            itemL1 = iterL1.hasNext()?iterL1.next():null;
                            itemL2 = iterL2.hasNext()?iterL2.next():null;
                        }
                        else if(compareResult>0)
                        {
                            //因为表是有序的。
                            itemL2 = iterL2.hasNext()?iterL2.next():null;
                        }
                        else if(compareResult<0)
                        {
                            itemL1 = iterL1.hasNext()?iterL1.next():null;
                        }
                    }               
               }

//2.计算L1与L2的并运算
                public static <AnyType extends Comparable<? super AnyType>>
                       void union(List<AnyType> L1,List<AnyType> L2,List<Anytype> Result)
                       {
                            List<AnyType> iterL1 = L1.ListIterator();
                            List<AnyType> iterL2 = L2.ListIterator();

                            AnyType itemL1 = null,itemL2 = null;

                            //get first item in every list
                            if(iterL1.hasNext()&&iterL2.hasNext())
                            {
                                itemL1 = iterL1.next();
                                itemL2 = iterL2.next();
                            }
                            while(itemL1!=null&&itemL2!=null)
                            {
                                int compareResult = itemL1.comparaTo(itemL2);

                                if(compareResult==0)
                                {
                                    Reseult.add(itemL1);

                                    itemL1 = iterL1.hasNext()?iterL1.next():null;
                                    itemL2 = iterL2.hasNext()?iterL2.next():null;
                                }
                                else if(compareResult>0)
                                {
                                    //因为表是有序的,itemL1>itemL2说明,它们相等的情况只可能发生在表L2的当前元素的后面。
                                    Result.add(itemL2);
                                    itemL2 = iterL2.hasNext()?iterL2.next():null;
                                }
                                else if(compareResult<0)
                                {
                                    //因为表是有序的,itemL1>itemL2说明,它们相等的情况只可能发生在表L1的当前元素的后面。
                                    Result.add(itemL1);
                                    itemL1 = iterL1.hasNext()?iterL1.next():null;
                                }
                            }
                       }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值