diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..e7e9d11 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1763e15 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..971920f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assignment-2-Gopal868484.iml b/assignment-2-Gopal868484.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/assignment-2-Gopal868484.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/assignment-2-Gopal868484/problem1/main/MyMain.class b/out/production/assignment-2-Gopal868484/problem1/main/MyMain.class new file mode 100644 index 0000000..5f25cb3 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem1/main/MyMain.class differ diff --git a/out/production/assignment-2-Gopal868484/problem1/mybst/MyBinarySearchTree.class b/out/production/assignment-2-Gopal868484/problem1/mybst/MyBinarySearchTree.class new file mode 100644 index 0000000..9a4dc9d Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem1/mybst/MyBinarySearchTree.class differ diff --git a/out/production/assignment-2-Gopal868484/problem1/node/TreeNode.class b/out/production/assignment-2-Gopal868484/problem1/node/TreeNode.class new file mode 100644 index 0000000..cc44e12 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem1/node/TreeNode.class differ diff --git a/out/production/assignment-2-Gopal868484/problem2/main/MyMain.class b/out/production/assignment-2-Gopal868484/problem2/main/MyMain.class new file mode 100644 index 0000000..fd53048 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem2/main/MyMain.class differ diff --git a/out/production/assignment-2-Gopal868484/problem3/main/MyMain.class b/out/production/assignment-2-Gopal868484/problem3/main/MyMain.class new file mode 100644 index 0000000..5ff2a20 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem3/main/MyMain.class differ diff --git a/out/production/assignment-2-Gopal868484/problem3/myqueue/MyPriorityQueue.class b/out/production/assignment-2-Gopal868484/problem3/myqueue/MyPriorityQueue.class new file mode 100644 index 0000000..8ea956b Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem3/myqueue/MyPriorityQueue.class differ diff --git a/out/production/assignment-2-Gopal868484/problem3/node/Node.class b/out/production/assignment-2-Gopal868484/problem3/node/Node.class new file mode 100644 index 0000000..0f804a9 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem3/node/Node.class differ diff --git a/out/production/assignment-2-Gopal868484/problem4/main/MyMain.class b/out/production/assignment-2-Gopal868484/problem4/main/MyMain.class new file mode 100644 index 0000000..2b91ec0 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem4/main/MyMain.class differ diff --git a/out/production/assignment-2-Gopal868484/problem4/myqueue/MyQueue.class b/out/production/assignment-2-Gopal868484/problem4/myqueue/MyQueue.class new file mode 100644 index 0000000..96617a1 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem4/myqueue/MyQueue.class differ diff --git a/out/production/assignment-2-Gopal868484/problem5/circularqueue/MyCircularQueue.class b/out/production/assignment-2-Gopal868484/problem5/circularqueue/MyCircularQueue.class new file mode 100644 index 0000000..aa0ac32 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem5/circularqueue/MyCircularQueue.class differ diff --git a/out/production/assignment-2-Gopal868484/problem5/main/MyMain.class b/out/production/assignment-2-Gopal868484/problem5/main/MyMain.class new file mode 100644 index 0000000..a5ee8e2 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem5/main/MyMain.class differ diff --git a/out/production/assignment-2-Gopal868484/problem5/node/Node.class b/out/production/assignment-2-Gopal868484/problem5/node/Node.class new file mode 100644 index 0000000..1289d39 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem5/node/Node.class differ diff --git a/out/production/assignment-2-Gopal868484/problem5/student/Student.class b/out/production/assignment-2-Gopal868484/problem5/student/Student.class new file mode 100644 index 0000000..3c6e415 Binary files /dev/null and b/out/production/assignment-2-Gopal868484/problem5/student/Student.class differ diff --git a/src/problem1/main/MyMain.java b/src/problem1/main/MyMain.java index 2539f2b..064aa96 100644 --- a/src/problem1/main/MyMain.java +++ b/src/problem1/main/MyMain.java @@ -1,11 +1,25 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:17 PM - */ package problem1.main; -// executable class + +import problem1.mybst.MyBinarySearchTree; public class MyMain { + public static void main(String[] args) { + MyBinarySearchTree mytree = new MyBinarySearchTree(); + mytree.insert(50); + mytree.insert(30); + mytree.insert(20); + mytree.insert(40); + mytree.insert(70); + mytree.insert(60); + mytree.insert(80); + mytree.insert(90); + mytree.insert(10); + System.out.println("PreOrder Traversal : "); + mytree.traversePreOrder(); + System.out.println("Left children Only : "); + //traverseLeft() methods prints all left children as well as returns the no of nodes not having left a child + System.out.println("No of nodes not having Left Subchild: " + mytree.traverseLeft()); + + } } + diff --git a/src/problem1/mybst/MyBinarySearchTree.java b/src/problem1/mybst/MyBinarySearchTree.java index 1dd6794..90cbbf2 100644 --- a/src/problem1/mybst/MyBinarySearchTree.java +++ b/src/problem1/mybst/MyBinarySearchTree.java @@ -1,10 +1,139 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:17 PM - */ package problem1.mybst; -// to implement BinarySearchTree + +import problem1.node.TreeNode; + public class MyBinarySearchTree { -} + private TreeNode root; + + public MyBinarySearchTree() { + root = null; + } + + public TreeNode getRoot() { + return root; + } + + + public void insert(int data) { + root = insertRecursive(root, data); + } + + TreeNode insertRecursive(TreeNode root, int data) { + if (root == null) { + root = new TreeNode(data); + return root; + } else { + if (root.getData() > data) { + root.setLeft(insertRecursive(root.getLeft(), data)); + } else if (root.getData() < data) { + root.setRight(insertRecursive(root.getRight(), data)); + } + return root; + } + } + + + public void traverseInOrder() { + traverseInOrderRec(root); + System.out.println(); + } + + // A recursive function to do inorder traversal of BST + void traverseInOrderRec(TreeNode root) { + if (root != null) { + traverseInOrderRec(root.getLeft()); + System.out.print(root.getData() + " "); + traverseInOrderRec(root.getRight()); + } + } + + //prints only left nodes + public int traverseLeft() { + int noOfNodesNotHavingLeftChild = traverseLeftNodesRec(root, false); + System.out.println(); + return noOfNodesNotHavingLeftChild; + + } + + // A recursive function to do left traversal of BST + //Also returns no of nodes not having left subchild + int traverseLeftNodesRec(TreeNode root, boolean fromLeft) { + int count = 0; + if (root != null) { + if (fromLeft == true) + System.out.print(root.getData() + " "); + if (root.getLeft() == null) { + count++; + } + return count = count + traverseLeftNodesRec(root.getLeft(), true) + traverseLeftNodesRec(root.getRight(), false); + } + return count; + } + + public void traversePreOrder() { + traversePreOrderRec(root); + System.out.println(); + } + + // A recursive function to do preorder traversal of BST + void traversePreOrderRec(TreeNode root) { + if (root != null) { + System.out.print(root.getData() + " "); + traversePreOrderRec(root.getLeft()); + traversePreOrderRec(root.getRight()); + } + } + + public void traversePostOrder() { + traversePostOrderRec(root); + System.out.println(); + } + + // A recursive function to do preorder traversal of BST + void traversePostOrderRec(TreeNode root) { + if (root != null) { + traversePostOrderRec(root.getLeft()); + traversePostOrderRec(root.getRight()); + System.out.print(root.getData() + " "); + } + } + + //Searches Element + public boolean search(int data) { + TreeNode node = searchRec(root, data); + if (node == null) { + return false; + } else if (node.getData() == data) { + return true; + } else { + return false; + } + } + + public TreeNode searchRec(TreeNode root, int data) { + // Base Cases: root is null or key is present at root + if (root == null || root.getData() == data) + return root; + + // val is greater than root's key + if (root.getData() > data) + return searchRec(root.getLeft(), data); + + // val is less than root's key + return searchRec(root.getRight(), data); + } + + public int count() { + return countRec(root); + } + + // A recursive function to count total no of nodes of BST + public int countRec(TreeNode root) { + if (root == null) + return 0; + int count = 0; + count++; + count += (countRec(root.getLeft()) + countRec(root.getRight())); + return count; + } +} \ No newline at end of file diff --git a/src/problem1/node/TreeNode.java b/src/problem1/node/TreeNode.java index 80c857d..59f43af 100644 --- a/src/problem1/node/TreeNode.java +++ b/src/problem1/node/TreeNode.java @@ -1,10 +1,37 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:17 PM - */ package problem1.node; public class TreeNode { -} + private int data; + private TreeNode left; + private TreeNode right; + + public TreeNode(int data) { + this.data = data; + this.left = null; + this.right = null; + } + + public int getData() { + return data; + } + + public void setData(int data) { + this.data = data; + } + + public TreeNode getLeft() { + return left; + } + + public void setLeft(TreeNode left) { + this.left = left; + } + + public TreeNode getRight() { + return right; + } + + public void setRight(TreeNode right) { + this.right = right; + } +} \ No newline at end of file diff --git a/src/problem2/main/MyMain.java b/src/problem2/main/MyMain.java index 4d84403..14f1636 100644 --- a/src/problem2/main/MyMain.java +++ b/src/problem2/main/MyMain.java @@ -1,11 +1,26 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:15 PM - */ package problem2.main; +import problem2.mybst.MyBinarySearchTree; // executable class -// use problem1.mybst.MyBinarySearchTree class for creating binary tree + public class MyMain { + public static void main(String[] args) { + MyBinarySearchTree mytree = new MyBinarySearchTree(); + mytree.insert(100); + mytree.insert(20); + mytree.insert(200); + mytree.insert(300); + mytree.insert(150); + mytree.insert(30); + mytree.insert(10); + System.out.println("PreOrder Traversal : "); + mytree.traversePreOrder(); + System.out.println("InOrder Traversal : "); + mytree.traverseInOrder(); + System.out.println("PostOrder Traversal : "); + mytree.traversePostOrder(); + System.out.println("Condition A : Root element is placed at opposite end," + "\n" + + "i.e. in pre order root is the first element where as in post order root is the last element. is TRUE"); + System.out.println("Condition B :They have common mid point,\n" + + "i.e. both the traversal will give same element at the mid position for odd number of nodes. is TRUE"); + } } diff --git a/src/problem2/mybst/MyBinarySearchTree.java b/src/problem2/mybst/MyBinarySearchTree.java new file mode 100644 index 0000000..e010b12 --- /dev/null +++ b/src/problem2/mybst/MyBinarySearchTree.java @@ -0,0 +1,138 @@ +package problem2.mybst; +// to implement BinarySearchTree + +import problem2.node.TreeNode; + +public class MyBinarySearchTree { + private TreeNode root; + + public MyBinarySearchTree() { + root = null; + } + + public TreeNode getRoot() { + return root; + } + + + public void insert(int data) { + root = insertRecursive(root, data); + } + + TreeNode insertRecursive(TreeNode root, int data) { + if (root == null) { + root = new TreeNode(data); + return root; + } else { + if (root.getData() > data) { + root.setLeft(insertRecursive(root.getLeft(), data)); + } else if (root.getData() < data) { + root.setRight(insertRecursive(root.getRight(), data)); + } + return root; + } + } + + + public void traverseInOrder() { + traverseInOrderRec(root); + System.out.println(); + } + + // A recursive function to do inorder traversal of BST + void traverseInOrderRec(TreeNode root) { + if (root != null) { + traverseInOrderRec(root.getLeft()); + System.out.print(root.getData() + " "); + traverseInOrderRec(root.getRight()); + } + } + + //prints only left nodes + public int traverseLeft() { + int noOfNodesNotHavingLeftChild = traverseLeftNodesRec(root, false); + System.out.println(); + return noOfNodesNotHavingLeftChild; + } + + // A recursive function to do left traversal of BST + //Also returns no of nodes not having left subchild + int traverseLeftNodesRec(TreeNode root, boolean fromLeft) { + int count = 0; + if (root != null) { + if (fromLeft == true) + System.out.print(root.getData() + " "); + if (root.getLeft() == null) { + count++; + } + return count = count + traverseLeftNodesRec(root.getLeft(), true) + traverseLeftNodesRec(root.getRight(), false); + } + return count; + } + + public void traversePreOrder() { + traversePreOrderRec(root); + System.out.println(); + } + + // A recursive function to do preorder traversal of BST + void traversePreOrderRec(TreeNode root) { + if (root != null) { + System.out.print(root.getData() + " "); + traversePreOrderRec(root.getLeft()); + traversePreOrderRec(root.getRight()); + } + } + + public void traversePostOrder() { + traversePostOrderRec(root); + System.out.println(); + } + + // A recursive function to do preorder traversal of BST + void traversePostOrderRec(TreeNode root) { + if (root != null) { + traversePostOrderRec(root.getLeft()); + traversePostOrderRec(root.getRight()); + System.out.print(root.getData() + " "); + } + } + + public boolean search(int data) { + TreeNode node = searchRec(root, data); + if (node == null) { + return false; + } else if (node.getData() == data) { + return true; + } else { + return false; + } + } + + public TreeNode searchRec(TreeNode root, int data) { + // Base Cases: root is null or key is present at root + if (root == null || root.getData() == data) + return root; + + // val is greater than root's key + if (root.getData() > data) + return searchRec(root.getLeft(), data); + + // val is less than root's key + return searchRec(root.getRight(), data); + } + + public int count() { + return countRec(root); + } + + // A recursive function to count total no of nodes of BST + public int countRec(TreeNode root) { + if (root == null) + return 0; + int count = 0; + count++; + count += (countRec(root.getLeft()) + countRec(root.getRight())); + return count; + } +} \ No newline at end of file diff --git a/src/problem2/node/TreeNode.java b/src/problem2/node/TreeNode.java new file mode 100644 index 0000000..606506f --- /dev/null +++ b/src/problem2/node/TreeNode.java @@ -0,0 +1,37 @@ +package problem2.node; + +public class TreeNode { + private int data; + private TreeNode left; + private TreeNode right; + + public TreeNode(int data) { + this.data = data; + this.left = null; + this.right = null; + } + + public int getData() { + return data; + } + + public void setData(int data) { + this.data = data; + } + + public TreeNode getLeft() { + return left; + } + + public void setLeft(TreeNode left) { + this.left = left; + } + + public TreeNode getRight() { + return right; + } + + public void setRight(TreeNode right) { + this.right = right; + } +} \ No newline at end of file diff --git a/src/problem3/main/MyMain.java b/src/problem3/main/MyMain.java index c719a1a..bb5f79d 100644 --- a/src/problem3/main/MyMain.java +++ b/src/problem3/main/MyMain.java @@ -1,11 +1,42 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:13 PM - */ package problem3.main; // executable class // use problem5.student.Student class to create object of student + +import problem3.myqueue.MyPriorityQueue; +import problem5.student.Student; + public class MyMain { -} + public static void main(String[] args) { + MyPriorityQueue queue = new MyPriorityQueue(); + queue.enqueue(new Student(7, "Virus Ninja")); + queue.display(); + //System.out.println(queue.getSize()); + //System.out.println(queue.peek().getStudent() + " element at front"); + queue.enqueue(new Student(2, "Peter Maximoff")); + queue.display(); + queue.enqueue(new Student(3, "Matt Murdock")); + queue.display(); + queue.enqueue(new Student(5, "Sam Fisher")); + queue.display(); + queue.enqueue(new Student(1, "Solid Snake")); + queue.display(); + queue.enqueue(new Student(6, "Erik Lehnsherr")); + queue.display(); + queue.enqueue(new Student(4, "Bruce Banner")); + queue.display(); + System.out.println(queue.poll().getStudent() + " polled"); + queue.display(); + //System.out.println(queue.rear().getStudent() + " is rear"); + System.out.println(queue.poll().getStudent() + " polled"); + queue.display(); + //System.out.println(queue.rear().getStudent() + " is rear"); + System.out.println(queue.poll().getStudent() + " polled"); + queue.display(); + //System.out.println(queue.rear().getStudent() + " is rear"); + System.out.println(queue.poll().getStudent() + " polled"); + queue.display(); + //System.out.println(queue.rear().getStudent() + " is rear"); + System.out.println("The Size Queue is = " + queue.getSize()); + + } +} \ No newline at end of file diff --git a/src/problem3/myqueue/MyPriorityQueue.java b/src/problem3/myqueue/MyPriorityQueue.java index 5426bfa..f4efcf8 100644 --- a/src/problem3/myqueue/MyPriorityQueue.java +++ b/src/problem3/myqueue/MyPriorityQueue.java @@ -1,10 +1,123 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:15 PM - */ package problem3.myqueue; +import problem3.node.Node; +import problem5.student.Student; + public class MyPriorityQueue { + // a field to refer rear end of queue + private Node rear; + // a field to refer front end of queue + private Node front; + private int size;// total number of elements in the queue + + // constructor + public MyPriorityQueue() { + front = null; + rear = null; + size = 0; + } + + // a method to check whether queue is empty + public boolean isEmpty() { + boolean response = false; + if (size == 0) { + response = true; + } + return response; + } + + + // a method to add a new element in queue + public void enqueue(Student element) { + Node node = new Node(element); + Node temp = front; + Node previous = temp; + if (isEmpty()) { + rear = node; + front = node; + size++; + } else { + while (temp.getStudent().getRollNo() < element.getRollNo() && temp != null) { + previous = temp; + temp = temp.getNext(); + } + if (previous == front && temp == front) { + node.setNext(front); + front = node; + } else { + previous.setNext(node); + node.setNext(temp); + } + + if (temp == null) { + rear = node; + } + size++; + } +// if (isEmpty()) { +// rear = node; +// front = node; +// size++; +// } else { +// rear.setNext(node); +// rear = node; +// size++; +// } + //sortQueue(); + } + + + public Node poll() { + Node res = null; + if (!isEmpty()) { + if (front.getNext() != null) { + res = front; + front = front.getNext(); + res.setNext(null); + size--; + } else { + res = front; + //res.getNext(null);//redundant + front = null; + rear = null; + size--; + } + } else { + System.out.println("Queue UnderFlow"); + } + return res; + + } + + // a method to get front element without removing it + public Node peek() { + Node response = null; + if (!isEmpty()) { + response = new Node(front.getStudent()); + } + return response; + } + + + public void display() { + System.out.print("Display : "); + Node temp = front; + while (temp != null) { + System.out.print(temp.getStudent()); + if (temp.getNext() != null) { + System.out.print("<---"); + } + temp = temp.getNext(); + } + System.out.println(); + } + + // a method to get size of queue + public int getSize() { + return size; + } + + public Node rear() { + return rear; + } } diff --git a/src/problem3/node/Node.java b/src/problem3/node/Node.java index 277d7ec..e9dbd18 100644 --- a/src/problem3/node/Node.java +++ b/src/problem3/node/Node.java @@ -1,10 +1,29 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:13 PM - */ package problem3.node; +import problem5.student.Student; + public class Node { -} + private Student student; + private Node next; + + public Node(Student student) { + this.student = student; + next = null; + } + + public Student getStudent() { + return student; + } + + public void setStudent(Student student) { + this.student = student; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } +} \ No newline at end of file diff --git a/src/problem4/main/MyMain.java b/src/problem4/main/MyMain.java index 10ebfa8..3b80d4c 100644 --- a/src/problem4/main/MyMain.java +++ b/src/problem4/main/MyMain.java @@ -1,11 +1,27 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:08 PM - */ package problem4.main; + +import problem1.mybst.MyBinarySearchTree; +import problem4.myqueue.MyQueue; + // executable class // use problem1.mybst.MyBinarySearchTree class for creating binary tree + public class MyMain { -} + public static void main(String[] args) { + MyBinarySearchTree mytree = new MyBinarySearchTree(); + mytree.insert(50); + mytree.insert(30); + mytree.insert(20); + mytree.insert(40); + mytree.insert(70); + mytree.insert(60); + mytree.insert(80); + mytree.insert(90); + mytree.insert(10); + System.out.println("PreOrder Traversal : "); + mytree.traversePreOrder(); + MyQueue queue = new MyQueue(); + queue.storePreOrderSuccessor(mytree); + queue.display(); + } +} \ No newline at end of file diff --git a/src/problem4/myqueue/MyQueue.java b/src/problem4/myqueue/MyQueue.java index 7e10cf6..666e532 100644 --- a/src/problem4/myqueue/MyQueue.java +++ b/src/problem4/myqueue/MyQueue.java @@ -1,11 +1,113 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:11 PM - */ package problem4.myqueue; // to create queue to store pre - order successor +import problem1.mybst.MyBinarySearchTree; +import problem1.node.TreeNode; +import problem4.node.Node; public class MyQueue { -} + // a field to refer rear end of queue + private Node rear; + // a field to refer front end of queue + private Node front; + private int size;// total number of elements in the queue + + // constructor + public MyQueue() { + front = null; + rear = null; + size = 0; + } + + public void storePreOrderSuccessor(MyBinarySearchTree tree) { + TreeNode root = tree.getRoot(); + storePreOrderSuccesssorRec(root); + } + + // A recursive function to do preorder traversal of BST + void storePreOrderSuccesssorRec(TreeNode root) { + if (root != null) { + enqueue(root.getData()); + storePreOrderSuccesssorRec(root.getLeft()); + storePreOrderSuccesssorRec(root.getRight()); + } + } + + + // a method to check whether queue is empty + public boolean isEmpty() { + boolean response = false; + if (size == 0) { + response = true; + } + return response; + } + + + // a method to add a new element in queue + public void enqueue(int element) { + Node node = new Node(element); + if (isEmpty()) { + rear = node; + front = node; + size++; + } else { + rear.setNext(node); + rear = node; + size++; + } + } + + public Node dequeue() { + Node res = null; + if (!isEmpty()) { + if (front.getNext() != null) { + res = front; + front = front.getNext(); + res.setNext(null); + size--; + } else { + res = front; + //res.getNext(null);//redundant + front = null; + rear = null; + size--; + } + } else { + System.out.println("Queue UnderFlow"); + } + return res; + + } + + // a method to get front element without removing it + public Node peek() { + Node response = null; + if (!isEmpty()) { + response = new Node(front.getData()); + } + return response; + } + + + public void display() { + System.out.print("Display Queue: "); + Node temp = front; + while (temp != null) { + System.out.print(temp.getData()); + if (temp.getNext() != null) { + System.out.print("<---"); + } + temp = temp.getNext(); + } + System.out.println(); + } + + // a method to get size of queue + public int getSize() { + return size; + } + + public Node rear() { + return rear; + } +} \ No newline at end of file diff --git a/src/problem4/node/Node.java b/src/problem4/node/Node.java new file mode 100644 index 0000000..1f74203 --- /dev/null +++ b/src/problem4/node/Node.java @@ -0,0 +1,27 @@ +package problem4.node; + +public class Node { + private int data; + private Node next; + + public Node(int data) { + this.data = data; + next = null; + } + + public int getData() { + return data; + } + + public void setData(int data) { + this.data = data; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } +} \ No newline at end of file diff --git a/src/problem5/circularqueue/MyCircularQueue.java b/src/problem5/circularqueue/MyCircularQueue.java index 23ec7ea..5ac0cb7 100644 --- a/src/problem5/circularqueue/MyCircularQueue.java +++ b/src/problem5/circularqueue/MyCircularQueue.java @@ -1,10 +1,119 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:06 PM - */ package problem5.circularqueue; //to implement circular queue + +import problem5.node.Node; +import problem5.student.Student; + public class MyCircularQueue { -} + // a field to refer rear end of queue + private Node rear; + // a field to refer front end of queue + private Node front; + private int size;// total number of elements in the queue + + // constructor + public MyCircularQueue() { + front = null; + rear = null; + size = 0; + } + + public boolean processStudents() { + Node node = front; + Student stu = node.getStudent(); + if (stu.getAppearingCount() > stu.getBackLogCounter()) { + stu.setAppearingCount(stu.getBackLogCounter()); + } + stu.setBackLogCounter(stu.getBackLogCounter() - stu.getAppearingCount()); + if (stu.getBackLogCounter() <= 0) { + dequeue(); + System.out.println(stu + "'s Backlogs Cleared (" + stu.getAppearingCount() + " Appearances)!!!"); + if (size == 0) return false; + } else { + System.out.println(stu + " Processed - Remaining Backlogs (" + stu.getAppearingCount() + " Appearances) = " + stu.getBackLogCounter()); + } + return true; + } + + // a method to check whether queue is empty + public boolean isEmpty() { + boolean response = false; + if (size == 0) { + response = true; + } + return response; + } + + // a method to add a new element in queue + public void enqueue(Student element) { + Node node = new Node(element); + if (isEmpty()) { + rear = node; + front = node; + rear.setNext(front); + size++; + } else { + rear.setNext(node); + rear = node; + node.setNext(front); + size++; + } + } + + public Node dequeue() { + Node res = null; + if (!isEmpty()) { + if (front.getNext() != front) { + res = front; + front = front.getNext(); + rear.setNext(front); + res.setNext(null); + size--; + } else { + res = front; + //res.getNext(null);//redundant + front = null; + rear = null; + size--; + } + } else { + System.out.println("Queue UnderFlow"); + } + return res; + + } + + // a method to get front element without removing it + public Node peek() { + Node response = null; + if (!isEmpty()) { + response = new Node(front.getStudent()); + } + return response; + } + + + public void display() { + System.out.print("Display : "); + Node temp = front; + while (temp != rear) { + System.out.print(temp.getStudent()); + if (temp.getNext() != null) { + System.out.print("<---"); + } + temp = temp.getNext(); + } + if (rear != null) + System.out.print(rear.getStudent()); + System.out.println(); + } + + // a method to get size of queue + public int getSize() { + return size; + } + + public Node rear() { + return rear; + } +} \ No newline at end of file diff --git a/src/problem5/main/MyMain.java b/src/problem5/main/MyMain.java index 9bdcc20..a3f1072 100644 --- a/src/problem5/main/MyMain.java +++ b/src/problem5/main/MyMain.java @@ -1,10 +1,31 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:06 PM - */ package problem5.main; //executable class + +import problem5.circularqueue.MyCircularQueue; +import problem5.student.Student; + +import java.util.Random; + public class MyMain { -} + public static void main(String[] args) { + Random rand = new Random(); + MyCircularQueue queue = new MyCircularQueue(); + System.out.println("Adding Students :\n---------------------------"); + queue.enqueue(new Student(1, "virus", 2, rand.nextInt(2) + 1)); + queue.display(); + queue.enqueue(new Student(2, "ninja", 4, rand.nextInt(2) + 1)); + queue.display(); + queue.enqueue(new Student(3, "Magneto", 3, rand.nextInt(2) + 1)); + queue.display(); + queue.enqueue(new Student(4, "Hulk", 5, rand.nextInt(2) + 1)); + queue.display(); + queue.enqueue(new Student(5, "Professor", 0, rand.nextInt(2) + 1)); + queue.display(); + System.out.println("Processing Elements :\n---------------------------"); + while (queue.processStudents() != false) { + //Processing Students Until Queue is empty + //EveryProcess the student clears 1-2 backlogs + } + queue.display(); + } +} \ No newline at end of file diff --git a/src/problem5/node/Node.java b/src/problem5/node/Node.java index 64fd972..5b3489b 100644 --- a/src/problem5/node/Node.java +++ b/src/problem5/node/Node.java @@ -1,10 +1,31 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:06 PM - */ package problem5.node; + +import problem5.student.Student; + // to define node properties public class Node { -} + private int data; + private Node next; + private Student student; + + public Node(Student student) { + this.student = student; + next = null; + } + + public Student getStudent() { + return student; + } + + public void setStudent(Student student) { + this.student = student; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } +} \ No newline at end of file diff --git a/src/problem5/student/Student.java b/src/problem5/student/Student.java index 4d11bed..7ff79b3 100644 --- a/src/problem5/student/Student.java +++ b/src/problem5/student/Student.java @@ -1,10 +1,57 @@ -/* - * Created by IntelliJ IDEA. - * User: Vaibhav - * Date: 23-Mar-20 - * Time: 7:06 PM - */ package problem5.student; // to store student information and properties public class Student { -} + private int rollNo; + private String name; + private int backLogCounter; + private int appearingCount; + + public Student(int rollNo, String name) { + this.rollNo = rollNo; + this.name = name; + } + + public Student(int rollNo, String name, int backLogCounter, int appearingCount) { + this.rollNo = rollNo; + this.name = name; + this.backLogCounter = backLogCounter; + this.appearingCount = appearingCount; + } + + public int getRollNo() { + return rollNo; + } + + public void setRollNo(int rollNo) { + this.rollNo = rollNo; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return name + " #" + rollNo; + } + + public int getBackLogCounter() { + return backLogCounter; + } + + public void setBackLogCounter(int backLogCounter) { + this.backLogCounter = backLogCounter; + } + + public int getAppearingCount() { + return appearingCount; + } + + public void setAppearingCount(int appearingCount) { + this.appearingCount = appearingCount; + } +} \ No newline at end of file