Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package eg.edu.alexu.csd.datastructure.linkedList.cs04;
- import java.awt.Point;
- import java.util.Arrays;
- import java.util.Comparator;
- import java.util.Scanner;
- import eg.edu.alexu.csd.datastructure.linkedList.ILinkedList;
- import eg.edu.alexu.csd.datastructure.linkedList.IPolynomialSolver;
- public class SinglyLinkedList implements IPolynomialSolver, ILinkedList {
- private SListNode head = null;
- public int size = 0;
- static int x, y;
- SinglyLinkedList list = new SinglyLinkedList();
- SinglyLinkedList a1 = new SinglyLinkedList();
- SinglyLinkedList b1 = new SinglyLinkedList();
- SinglyLinkedList c1 = new SinglyLinkedList();
- SinglyLinkedList subt = new SinglyLinkedList();
- SinglyLinkedList multi = new SinglyLinkedList();
- SinglyLinkedList tempList2 = new SinglyLinkedList();
- int pointsSumed = 0;
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- SinglyLinkedList object = new SinglyLinkedList();
- // SinglyLinkedList list = new SinglyLinkedList();
- // SinglyLinkedList tempList2 = new SinglyLinkedList();
- Scanner scan = new Scanner(System.in);
- Object ob = scan.next();
- //// list.add(5);
- //// list.print();
- //// list.remove(0);
- //// list.print();
- // Object get_object ;
- //// list.add(1,5);
- //// list.print();
- // list.add(50);
- // // list.add(40);
- // //list.add(30);
- // //list.print();
- // get_object = list.get(0);
- // System.out.println(get_object);
- //
- // // list.print();
- //
- // get_object = list.get(1);
- // System.out.println(get_object);
- //
- // //list.print();
- //
- // get_object = list.get(2);
- // System.out.println(get_object);
- // list.add(50);
- // list.add(40);
- // list.add(30);
- // list.set(0, 5);
- // list.print();
- // list.set(1, 4);
- // list.print();
- // list.set(2, 3);
- // list.print();
- // list.set(2, 4);
- // list.set(2, -1);
- // list.remove(0);
- // list.print();
- // list.remove(1);
- // list.print();
- // list.remove(0);
- // list.print();
- // list.clear();
- // list.print();
- // Object get_object = list.get(0);
- // System.out.println(get_object);
- // int size2 = list.size();
- // System.out.println(size2);
- // list.add(0, 5);
- // list.add('v');
- // size2 = list.size();
- // System.out.println(size2);
- // Object get_object = list.get(1);
- // System.out.println(get_object);
- // boolean bool = list.contains('v');
- // System.out.println(bool);
- object.list.add(0);
- object.list.add(1);
- object.list.add(2);
- object.list.add(3);
- object.list.add(4);
- object.list.add(5);
- object.list.removeAtTail();
- // boolean bool = list.contains(3);
- // System.out.println(bool);
- // tempList2 = (SinglyLinkedList) list.sublist(5, 5);
- // int temp1 = object.x ;
- // System.out.println(x);
- // System.out.println(y);
- // int temp = Math.abs(x - y) + 1;
- // System.out.println(temp);
- // for (int i = 0; i < temp; i++) {
- // System.out.print(tempList2.get(i) + " ");
- // }
- object.list.print();
- }
- SinglyLinkedList list2 = new SinglyLinkedList();
- // public void sort(SinglyLinkedList l) {
- // int xx, yy, conv;
- // SListNode i = head;
- //
- // while (i != null) {
- // // System.out.print(i.value + " ");
- // // String str = i.value.toString();
- // // conv = Integer.parseInt(str);
- // i = i.next;
- // }
- // // System.out.println();
- //
- // }
- public void print() {
- SListNode i = head;
- if (i == null) {
- System.out.println("empty");
- }
- while (i != null) {
- System.out.print(i.value + " ");
- i = i.next;
- }
- System.out.println();
- }
- // public SinglyLinkedList addTwoLists(SinglyLinkedList poly1,
- // SinglyLinkedList poly2) {
- // SListNode pointer1 = poly1.head;
- // SListNode pointer2 = poly1.head;
- // int shortSize = poly1.size ;
- // if( poly1.size > poly2.size){
- // shortSize = poly2.size ;
- // }
- // for (int counter = 0; counter <= shortSize - 1; counter++) {
- // if (counter == shortSize - 1) {
- // if (pointer1.value.x == pointer2.value.x){
- // sum.add((pointer1.value.x , pointer1.value.y + pointer2.value.y));
- // }
- // else{
- // sum.add(pointer1.value);
- // for ( int counterB = 0 ; counterB < Math.abs(poly1.size - poly2.size) ;
- // counterB++){
- // sum.add(pointer2.value);
- // }
- // }
- // } else {
- // if (pointer1.value.x == pointer2.value.x){
- // sum.add((pointer1.value.x , pointer1.value.y + pointer2.value.y));
- // pointer1 = pointer1.next ;
- // pointer2 = pointer2.next ;
- // }
- // else{
- // sum.add(pointer1.value);
- // pointer1 = pointer1.next ;
- // }
- // }
- // }
- //
- // return sum;
- // }
- // public SinglyLinkedList subtractTwoLists(SinglyLinkedList poly1 ,
- // SinglyLinkedList poly2) {
- // SListNode pointer1 = poly1.head;
- // SListNode pointer2 = poly1.head;
- // int shortSize = poly1.size ;
- //// if( poly1.size > poly2.size){
- //// shortSize = poly2.size ;
- //// }
- // for (int counter = 0; counter <= shortSize - 1; counter++) {
- // if (counter == shortSize - 1) {
- // if (pointer1.value.x == pointer2.value.x){
- // sum.add((pointer1.value.x , pointer1.value.y + pointer2.value.y));
- // }
- // else{
- // sum.add(pointer1.value);
- // for ( int counterB = 0 ; counterB < Math.abs(poly1.size - poly2.size) ;
- // counterB++){
- // sum.add(pointer2.value);
- // }
- // }
- // } else {
- // if (pointer1.value.x == pointer2.value.x){
- // subt.add((pointer1.value.x , pointer1.value.y - pointer2.value.y));
- // pointer1 = pointer1.next ;
- // pointer2 = pointer2.next ;
- // }
- // else{
- // sum.add(pointer1.value);
- // pointer1 = pointer1.next ;
- // }
- // }
- // }
- //
- // return subt;
- // }
- // public SinglyLinkedList convertToPoints(int[][] array) {
- // SinglyLinkedList toBeReturnList = new SinglyLinkedList();
- // //Point fPoint
- // return toBeReturnList;
- // }
- @Override
- public void add(int index, Object element) {
- // TODO Auto-generated method stub
- SListNode adder = new SListNode(element);
- SListNode i = head;
- if (index > size) {
- throw new RuntimeException("index greater than the size can't be available");
- } else {
- // done
- if (index == 0) {
- adder.next = head;
- head = adder;
- size++;
- } else {
- adder.value = element;
- for (int counter = 0; counter < index - 1; counter++) {
- i = i.next;
- }
- adder.next = i.next;
- i.next = adder;
- size++;
- }
- }
- }
- @Override
- public void add(Object element) {
- add(size, element);
- }
- @Override
- public Object get(int index) {
- // TODO Auto-generated method stub
- // SListNode adder = new SListNode(index);
- SListNode i = head;
- if (size == 0 || index < 0 || index > size - 1 || head == null) {
- throw new RuntimeException("no ellement empty list or out of bound");
- } else {
- if (index == 0) {
- return i.value;
- } else {
- if (index == 1) {
- i = i.next;
- return i.value;
- } else {
- for (int counter = 0; counter < index; counter++) {
- i = i.next;
- }
- }
- return i.value;
- }
- }
- // return null;
- }
- @Override
- public void set(int index, Object element) {
- SListNode adder = new SListNode(element);
- SListNode i = head;
- SListNode j = head;
- if (index >= size || index < 0) {
- throw new RuntimeException("can't replace ");
- }
- if (index == 0) {
- adder.next = i.next;
- head = adder;
- // size++;
- } else {
- adder.value = element;
- for (int counter = 0; counter < index - 1; counter++) {
- j = j.next;
- }
- for (int counter = 0; counter < index; counter++) {
- i = i.next;
- }
- adder.next = i.next;
- j.next = adder;
- // i.next = null;
- // size++;
- }
- }
- @Override
- public void clear() {
- // TODO Auto-generated method stub
- head = null;
- size = 0;
- }
- @Override
- public boolean isEmpty() {
- SListNode i = head;
- if (i == null) {
- return true;
- }
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public void remove(int index) {
- if (index < 0 || index >= size) {
- throw new RuntimeException(" already empty or out of bound");
- }
- else {
- SListNode i = head;
- if (index == 0) {
- head = head.next;
- size--;
- }
- else
- {
- if (head == null) {
- throw new RuntimeException(" already empty or out of bound");
- // added new
- }
- for (int counter = 0; counter < index - 1; counter++) {
- i = i.next;// while i!=null cased the error do not put it
- // again
- }
- SListNode remover = i.next;
- i.next = remover.next;
- size--;
- }
- }
- }
- void removeAtTail() {
- SListNode i = head;
- for (int counter = 0; counter < size - 2; counter++) {
- i = i.next;
- }
- i.next = null;
- size--;
- }
- @Override
- public int size() {
- return size;
- }
- @Override
- public ILinkedList sublist(int fromIndex, int toIndex) {
- x = fromIndex;
- y = toIndex;
- SListNode i = head;
- SinglyLinkedList tempList = new SinglyLinkedList();
- if (size == 0 || toIndex < fromIndex || toIndex < 0 || toIndex >= size || fromIndex < 0 || fromIndex >= size) {
- throw new RuntimeException("no ellement empty list or out of bound");
- } else {
- x = fromIndex;
- y = toIndex;
- for (int counter = fromIndex; counter <= toIndex; counter++) {
- tempList.add(counter);
- }
- return tempList;
- }
- }
- // changed == to .equals
- public boolean contains(Object o) {
- boolean flag = false;
- SListNode i = head;
- if (size == 0) {
- throw new RuntimeException("size is zero");
- }
- if (size == 1) {
- if (i.value.equals(o)) {
- flag = true;
- }
- } else {
- if (i.value.equals(o)) {
- flag = true;
- }
- for (int counter = 1; (counter <= size - 1) && (flag == false); counter++) {
- i = i.next;
- if (i.value.equals(o)) {
- flag = true;
- }
- }
- }
- return flag;
- }
- public SinglyLinkedList initialPoints(int[][] array2D) {
- int length2 = array2D[0].length;
- int max = -5000;
- int min = 5000;
- Point initialArray[] = new Point[length2];
- for (int i = 0; i < length2; length2++) {
- initialArray[i] = new Point();
- initialArray[i].x = array2D[i][0];
- initialArray[i].y = array2D[i][1];
- if (max < initialArray[i].x) {
- max = initialArray[i].x;
- }
- if (min > initialArray[i].x) {
- min = initialArray[i].x;
- }
- }
- Arrays.sort(initialArray, new Comparator<Point>() {
- public int compare(Point fPoint, Point sPoint) {
- int xDif = Integer.compare(fPoint.x, sPoint.x);
- if (xDif == 0)
- return Integer.compare(fPoint.y, sPoint.y);
- else
- return xDif;
- }
- });
- int lengthOfUnsorted = max - min + 1;
- boolean visited[] = new boolean[lengthOfUnsorted];
- int counterOfExponent = 0;
- for (int ii = 0; ii < length2; ii++) {
- int index = initialArray[ii].x - min;
- if (visited[index] == false) {
- visited[index] = true;
- counterOfExponent++;
- }
- }
- Point finalArray[] = new Point[counterOfExponent];
- for (int ii = 0; ii < counterOfExponent; ii++) {
- finalArray[ii] = new Point();
- }
- int indexOfFinalarray = 0;
- Point pointMovable = new Point(initialArray[0].x, initialArray[0].y);
- for (int i = 1; i < initialArray.length; i++) {
- if (initialArray[i].x == initialArray[i - 1].x) {
- int xx = initialArray[i - 1].x;
- int yy = initialArray[i - 1].y + pointMovable.y;
- pointMovable.x = xx;
- pointMovable.y = yy;
- } else {
- finalArray[indexOfFinalarray].x = pointMovable.x;
- finalArray[indexOfFinalarray].y = pointMovable.y;
- }
- }
- SinglyLinkedList returened = new SinglyLinkedList();
- for(int i = 0 ; i < finalArray.length ; i++){
- returened.add(finalArray[i]);
- }
- return returened;
- }
- public SinglyLinkedList addTwoLists(SinglyLinkedList list1, SinglyLinkedList list2) {
- Point[] array1 = new Point[list1.size];
- Point[] array2 = new Point[list2.size];
- for (int i = 0 ; i < array1.length ; i++){
- array1[i] = new Point();
- }
- for (int i = 0 ; i < array2.length ; i++){
- array2[i] = new Point();
- }
- SinglyLinkedList sum = new SinglyLinkedList();
- // int shortSize = array1.length;
- // int longSize = array2.length;
- Point[] fArray = array1;
- Point[] sArray = array2;
- if (array2[0].x < array1[0].x) {
- fArray = array2;
- sArray = array1;
- // shortSize = array2.length;
- // shortArray = array2;
- // longArray = array1;
- }
- Point sumPoint = new Point();
- int pointer1 = 0;
- int pointer2 = 0;
- boolean[] array11 = new boolean[fArray.length];
- boolean[] array22 = new boolean[sArray.length];
- int counterFalse1 = 0;
- int counterFalse2 = 0;
- for (int i = 0; i < fArray.length; i++) {
- if (fArray[pointer1].x == sArray[pointer2].x) {
- sumPoint.x = fArray[pointer1].x;
- sumPoint.y = sArray[pointer1].y + sArray[pointer2].y;
- sum.add(sumPoint);
- pointer1++;
- pointer2++;
- pointsSumed++;
- array11[pointer1] = true;
- array22[pointer2] = true;
- } else {
- sumPoint.x = fArray[pointer1].x;
- sumPoint.y = sArray[pointer1].y;
- sum.add(sumPoint);
- pointer1++;
- pointsSumed++;
- array11[pointer1] = true;
- }
- }
- for (int i = 0; i < array11.length; i++) {
- if (array11[i] == false) {
- counterFalse1++;
- }
- }
- for (int i = 0; i < array22.length; i++) {
- if (array22[i] == false) {
- counterFalse2++;
- }
- }
- Point[] notAdded = new Point[counterFalse1 + counterFalse2];
- for (int i = 0; i < counterFalse1 + counterFalse2; i++) {
- notAdded[i] = new Point();
- }
- int indexNotAdded = 0;
- for (int i = 0; i < counterFalse1; i++) {
- notAdded[indexNotAdded] = fArray[i + (fArray.length - counterFalse1)];
- indexNotAdded++;
- }
- for (int i = 0; i < counterFalse2; i++) {
- notAdded[indexNotAdded] = sArray[i + (sArray.length - counterFalse2)];
- indexNotAdded++;
- }
- Arrays.sort(notAdded, new Comparator<Point>() {
- public int compare(Point ffPoint, Point ssPoint) {
- int xDif = Integer.compare(ffPoint.x, ssPoint.x);
- return xDif;
- }
- });
- for (int i = 0; i < notAdded.length; i++) {
- sum.add(notAdded[i]);
- }
- return sum;
- }
- @Override
- public void setPolynomial(char poly, int[][] terms) {
- // TODO Auto-generated method stub
- if( poly == 'A' || poly == 'a' ){
- a1 = initialPoints(terms);
- }
- if( poly == 'B' || poly == 'b'){
- b1 = initialPoints(terms);
- }
- if( poly == 'C' || poly == 'c'){
- c1 = initialPoints(terms);
- }
- }
- @Override
- public String print(char poly) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public void clearPolynomial(char poly) {
- // TODO Auto-generated method stub
- }
- @Override
- public float evaluatePolynomial(char poly, float value) {
- // TODO Auto-generated method stub
- return 0;
- }
- @Override
- public int[][] add(char poly1, char poly2) {
- // TODO Auto-generated method stub
- SinglyLinkedList result = new SinglyLinkedList();
- if ( ( ( poly1 == 'A' || poly1 == 'a') && ( poly2 == 'B'|| poly2 == 'b' ) ) || ( ( poly2 == 'A' || poly2 == 'a') && ( poly1 == 'B'|| poly1 == 'b' ) ) ){
- result = addTwoLists(a1, b1);
- }
- else if ( ( ( poly1 == 'A' || poly1 == 'a') && ( poly2 == 'C'|| poly2 == 'c' ) ) || ( ( poly2 == 'A' || poly2 == 'a') && ( poly1 == 'C'|| poly1 == 'c' ) ) ){
- result = addTwoLists(a1 , c1 );
- }
- else if ( ( ( poly1 == 'C' || poly1 == 'c') && ( poly2 == 'B'|| poly2 == 'b' ) ) || ( ( poly2 == 'C' || poly2 == 'c') && ( poly1 == 'B'|| poly1 == 'b' ) ) ){
- result = addTwoLists(c1 , b1 );
- }
- int length2 = result.size ;
- Point[] returnedPoint = new Point [length2];
- for (int i = 0 ; i < length2 ; i++){
- returnedPoint[i] = new Point();
- returnedPoint[i] = (Point)result.get(i);
- }
- int[][] toBeReturnedArray = new int [2][length2];
- // for(int i =0 ; i < 1 ; i++){
- for (int j = 0; j < toBeReturnedArray.length; j++) {
- toBeReturnedArray[0][j] = returnedPoint[j].x ;
- toBeReturnedArray[1][j] = returnedPoint[j].y ;
- }
- return toBeReturnedArray;
- }
- @Override
- public int[][] subtract(char poly1, char poly2) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public int[][] multiply(char poly1, char poly2) {
- // TODO Auto-generated method stub
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement