// ArrayLinkedList2_test.java SJ import java.util.Random; public class ArrayLinkedList2_test { public static void main(String[] args) { int N = 10; if (args.length > 0) N = Integer.valueOf(args[0]); ArrayLinkedList2 omalista = randomList(N, N, N); System.out.println("Alkuperäinen"); printList(omalista); System.out.println("purge"); purge(omalista); printList(omalista); ArrayLinkedList2 omalista2 = randomList(N, N, N); System.out.println("Toinen lista"); printList(omalista2); System.out.println("Vertailu"); System.out.println(compareLists(omalista, omalista2)); System.out.println("purge 2"); purge(omalista2); printList(omalista2); System.out.println("Vertailu"); System.out.println(compareLists(omalista, omalista2)); ArrayLinkedList2 omalista3 = randomList(N, N/2, N); System.out.println("Kolmas lista"); printList(omalista3); ArrayLinkedList2 omalista4 = xor(omalista2, omalista3); System.out.println("XOR 2 & 3"); printList(omalista4); } // main() // returns a new ArrayLinkedList2 public static ArrayLinkedList2 randomList(int N, int M, int seed) { ArrayLinkedList2 L = new ArrayLinkedList2(N+2); Random r = new Random(seed); Integer x = new Integer(0); for (int i = 0; i < N; i++) { x = r.nextInt(M); L.insert(L.EOL, x); } return L; } // randomList() // prints a ArrayLinkedList2 public static void printList(ArrayLinkedList2 L) { int p = L.first(); System.out.print("("); while (p != L.EOL) { System.out.print(L.getElement(p)); p = L.getNext(p); if (p != L.EOL) System.out.print(","); } System.out.println(")"); } // printList() // removes duplicate elements public static void purge(ArrayLinkedList2 L) { int p = L.first(); while ( p != L.EOL) { int q = L.getNext(p); // check if same elements will be found while (q != L.EOL) { if (L.getElement(q).equals(L.getElement(p))) { // same element found, remove latter // viimeisen alkion poisto taulukkototeutuksessa // jättää q:n epävakaaseen tilaan!! if (q == L.last()) { L.remove(q); break; } else L.remove(q); } else q = L.getNext(q); } // while q p = L.getNext(p); } // while p } // purge() // compare elements of two lists public static boolean compareLists(ArrayLinkedList2 L1, ArrayLinkedList2 L2) { int p1 = L1.first(); int p2 = L2.first(); while (p1 != L1.EOL && p2 != L2.EOL) { if (! L1.getElement(p1).equals(L2.getElement(p2))) return false; p1 = L1.getNext(p1); p2 = L2.getNext(p2); } // while if (p1 == L1.EOL && p2 == L2.EOL) return true; else return false; } // compareLists() // XOR two lists public static ArrayLinkedList2 xor(ArrayLinkedList2 L1, ArrayLinkedList2 L2) { int p1 = L1.first(); ArrayLinkedList2 L = new ArrayLinkedList2(L1.size() + L2.size()); while (p1 != L1.EOL) { if (!contains(L, L1.getElement(p1)) && !contains(L2, L1.getElement(p1))) L.insert(L.EOL, L1.getElement(p1)); p1 = L1.getNext(p1); } int p2 = L2.first(); while (p2 != L2.EOL) { if (!contains(L, L2.getElement(p2)) && !contains(L1, L2.getElement(p2))) L.insert(L.EOL, L2.getElement(p2)); p2 = L2.getNext(p2); } return L; } // ArrayLinkedList2() public static boolean contains(ArrayLinkedList2 L, Object x) { int p = L.first(); while (p != L.EOL) { if (L.getElement(p).equals(x)) return true; p = L.getNext(p); } return false; } // contains() } // class ArrayLinkedList2_test