java---表、栈和队列

来源:互联网 发布:淘宝抓取 编辑:程序博客网 时间:2024/06/07 10:06

题目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 0