From 73e657a64a0af4c956226d712531c658e095bd4c Mon Sep 17 00:00:00 2001 From: HenryTech12 Date: Sun, 27 Apr 2025 08:02:29 +0100 Subject: [PATCH] dynamic programming with java --- .../linkedlist/LinkedList.java | 68 ++++++++ .../linkedlist/Node.java | 7 + .../queue/MyQueue.java | 106 +++++++++++++ .../search/MySearch.java | 34 ++++ .../sort/MySort.java | 46 ++++++ .../sort/SortType.java | 8 + .../stack/MyStack.java | 145 ++++++++++++++++++ 7 files changed, 414 insertions(+) create mode 100644 Java Collections Dynamic Programming/linkedlist/LinkedList.java create mode 100644 Java Collections Dynamic Programming/linkedlist/Node.java create mode 100644 Java Collections Dynamic Programming/queue/MyQueue.java create mode 100644 Java Collections Dynamic Programming/search/MySearch.java create mode 100644 Java Collections Dynamic Programming/sort/MySort.java create mode 100644 Java Collections Dynamic Programming/sort/SortType.java create mode 100644 Java Collections Dynamic Programming/stack/MyStack.java diff --git a/Java Collections Dynamic Programming/linkedlist/LinkedList.java b/Java Collections Dynamic Programming/linkedlist/LinkedList.java new file mode 100644 index 0000000..6cd900d --- /dev/null +++ b/Java Collections Dynamic Programming/linkedlist/LinkedList.java @@ -0,0 +1,68 @@ +package linkedlist; + +public class LinkedList +{ + Node head; + public void add(int data) { + Node node = new Node(); + node.data = data; + + if(head == null) { + head = node; + } + else { + Node n = head; + while(n.next != null) { + n = n.next; + } + n.next = node; + } + } + + + public int get(int index) { + Node n = head; + for(int i = 0; i < index; i++) { + n = n.next; + } + return n.data; + } + + public int getFirst() { + return head.data; + } + + public int getLast() { + return get(size() - 1); + } + + public int size() { + Node n = head; + int size = 0; + if(head != null) { + while(n.next != null) { + size++; + n = n.next; + } + size++; + } + return size; + } + + public boolean isEmpty() { + return size() == 0; + } + + public void clear() { + head = null; + } + + public void show() { + Node n = head; + while(n.next != null) { + System.out.println(n.data); + n = n.next; + } + System.out.println(n.data); + } +} diff --git a/Java Collections Dynamic Programming/linkedlist/Node.java b/Java Collections Dynamic Programming/linkedlist/Node.java new file mode 100644 index 0000000..6628190 --- /dev/null +++ b/Java Collections Dynamic Programming/linkedlist/Node.java @@ -0,0 +1,7 @@ +package linkedlist; + +public class Node +{ + int data; + Node next; +} diff --git a/Java Collections Dynamic Programming/queue/MyQueue.java b/Java Collections Dynamic Programming/queue/MyQueue.java new file mode 100644 index 0000000..a4bfbea --- /dev/null +++ b/Java Collections Dynamic Programming/queue/MyQueue.java @@ -0,0 +1,106 @@ +package queue; + +public class MyQueue +{ + private int[] arr; + private int size = 0; + + public void enqueue(int data) { + expand(); + arr[size-1] = data; + } + + private void expand() { + int tempSize = size + 1; + int temp[] = new int[tempSize]; + for(int i = 0; i < size; i++) { + temp[i] = arr[i]; + } + arr = temp; + size = tempSize; + } + + public int dequeue() { + int skip = 1; + int tempSize = size-1; + int temp[] = new int[tempSize]; + for(int i = 0; i < size-1; i++) { + temp[i] = arr[skip+i]; + } + int removedValue = arr[skip-1]; + arr = temp; + size = tempSize; + return removedValue; + } + + public int peek() { + return arr[0]; + } + + public int peekAt(int index) { + return arr[index]; + } + + public void clear() { + arr = new int[0]; + size = 0; + } + + public boolean contains(int data) { + for(int i = 0; i < size; i++) { + if(arr[i] == data) { + return true; + } + break; + } + return false; + } + + public int dequeueAt(int index) { + int tempSize = size-1; + int temp[] = new int[tempSize]; + int removedValue = arr[size-1]; + boolean isZero = false; + isZero = (index == 0); + for(int i = 0; i < size-1; i++) { + if(i != index) { + if(!isZero) { + temp[i] = arr[i]; + } + else { + temp[i] = arr[i+1]; + } + } + else { + temp[i] = arr[i+1]; + removedValue = arr[i]; + } + } + arr = temp; + size = tempSize; + return removedValue; + } + + public int[] copy(int[] data) { + int temp[] = new int[data.length]; + for(int i = 0; i < data.length; i++) { + temp[i] = data[i]; + } + return temp; + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + return size; + } + + + public void show() { + for(int i = 0; i < size; i++) { + System.out.println(arr[i]); + } + } +} diff --git a/Java Collections Dynamic Programming/search/MySearch.java b/Java Collections Dynamic Programming/search/MySearch.java new file mode 100644 index 0000000..71f8308 --- /dev/null +++ b/Java Collections Dynamic Programming/search/MySearch.java @@ -0,0 +1,34 @@ +package search; +import sort.*; + +public class MySearch +{ + public int linearSearch(int[] data, int target) { + for(int i = 0; i < data.length; i++) { + if(data[i] == target) { + return i; + } + } + return -1; + } + + //always pass in a sorted array + public int binarySearch(int[] arr, int target) { + int left = 0; + int right = arr.length - 1; + + while(left <= right) { + int mid = (left + right) / 2; + if(arr[mid] == target) { + return mid; + } + else if(arr[mid] < target) { + left = mid + 1; + } + else { + right = mid - 1; + } + } + return -1; + } +} diff --git a/Java Collections Dynamic Programming/sort/MySort.java b/Java Collections Dynamic Programming/sort/MySort.java new file mode 100644 index 0000000..7d53fe9 --- /dev/null +++ b/Java Collections Dynamic Programming/sort/MySort.java @@ -0,0 +1,46 @@ +package sort; + +public class MySort +{ + private SortType type = SortType.ASC; + + + public int[] bubbleSort(int[] data, SortType mytype) { + for(int i = 0; i < data.length; i++) { + for(int j = 0; j < data.length - i - 1; j++) { + if(data[j] > data[j+1]) { + if(type.toString().equals(mytype.toString())) + swap(data, j, j+1); + } + else { + if(!type.toString().equals(mytype.toString())) + swap(data,j,j+1); + } + } + } + + return data; + } + + public void swap(int[] data, int index1, int index2) { + int temp = data[index1]; + data[index1] = data[index2]; + data[index2] = temp; + } + + public int[] selectionSort(int[] data) { + for(int i = 0; i < data.length; i++) { + int minIndex = i; + for(int j = i+1; j < data.length; j++) { + if(data[j] < data[minIndex]) { + minIndex = j; + } + } + int temp = data[i]; + data[i] = data[minIndex]; + data[minIndex] = temp; + } + return data; + } + +} diff --git a/Java Collections Dynamic Programming/sort/SortType.java b/Java Collections Dynamic Programming/sort/SortType.java new file mode 100644 index 0000000..a3ae2c7 --- /dev/null +++ b/Java Collections Dynamic Programming/sort/SortType.java @@ -0,0 +1,8 @@ +package sort; + +public enum SortType +{ + ASC, + DESC +} + diff --git a/Java Collections Dynamic Programming/stack/MyStack.java b/Java Collections Dynamic Programming/stack/MyStack.java new file mode 100644 index 0000000..53f50be --- /dev/null +++ b/Java Collections Dynamic Programming/stack/MyStack.java @@ -0,0 +1,145 @@ +package stack; + +public class MyStack +{ + private int[] arr; + private int size = 0; + + public void push(int data) { + expand(); + + int temp[] = new int[size]; + for(int i = 0; i < size-1; i++) { + temp[i+1] = arr[i]; + } + arr = temp; + arr[0] = data; + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + return size; + } + + public int peek() { + return arr[0]; + } + + public int pop() { + int skip = 1; + int tempSize = size-1; + int temp[] = new int[tempSize]; + for(int i = 0; i < size-1; i++) { + temp[i] = arr[skip+i]; + } + int removedValue = arr[skip-1]; + arr = temp; + size = tempSize; + return removedValue; + } + + + private void expand() { + int tempSize = size +1; + int temp[] = new int[tempSize]; + for(int i = 0; i < size; i++) { + temp[i] = arr[i]; + } + arr = temp; + size = tempSize; + } + + public boolean contains(int data) { + return (binarySearch(data) != -1); + } + + public int[] sort() { + int temp[] = arr; + for(int i = 0; i < size; i++) { + for(int j = 0; j < size - 1; j++) { + if(arr[j] > arr[j+1]) { + int max = arr[j]; + arr[j] = arr[j+1]; + arr[j+1] = max; + } + } + } + return temp; + } + + public int[] copy(int[] data) { + int temp[] = new int[data.length]; + for(int i = 0; i < data.length; i++) { + temp[i] = arr[i]; + } + return temp; + } + + private int binarySearch(int target) { + int left = 0; + int right = arr.length - 1; + int unsorted[] = copy(arr); + + sort(); + while(left <= right) { + int mid = (left + right) / 2; + if(arr[mid] == target) { + arr = unsorted; + return mid; + } + else if(arr[mid] < target) { + left = mid + 1; + } + else { + right = mid - 1; + } + } + arr = unsorted; + return -1; + } + + public int popAt(int index) { + int tempSize = size-1; + int temp[] = new int[tempSize]; + int removedValue = arr[size-1]; + boolean isZero = false; + isZero = (index == 0); + + for(int i = 0; i < size-1; i++) { + if(i != index) { + if(!isZero) { + temp[i] = arr[i]; + } + else { + temp[i] = arr[i+1]; + } + } + else { + removedValue = arr[i]; + temp[i] = arr[i+1]; + } + } + arr = temp; + size = tempSize; + return removedValue; + } + + public void clear() { + arr = new int[0]; + size = 0; + } + + public int peekAt(int index) { + return arr[index]; + } + + public void show() { + for(int i = 0; i < size; i++) { + System.out.println(arr[i]); + } + } + +}