diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..7240330 Binary files /dev/null and b/.DS_Store differ diff --git a/Java/.DS_Store b/Java/.DS_Store new file mode 100644 index 0000000..270b1cb Binary files /dev/null and b/Java/.DS_Store differ diff --git a/Java/algorithms/.DS_Store b/Java/algorithms/.DS_Store new file mode 100644 index 0000000..466079f Binary files /dev/null and b/Java/algorithms/.DS_Store differ diff --git a/Java/algorithms/Huffman.java b/Java/algorithms/Huffman.java new file mode 100644 index 0000000..6f853c2 --- /dev/null +++ b/Java/algorithms/Huffman.java @@ -0,0 +1,183 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.PriorityQueue; + +class HuffmanNode { + + int data; + char c; + + HuffmanNode left; + HuffmanNode right; +} + +class MyComparator implements Comparator { + + public int compare(HuffmanNode x, HuffmanNode y) { + return x.data - y.data; + } +} + +class HuffmanBuild { + + private HashMap hash_map; + private HashMap new_hash_map; + private PriorityQueue q; + private String filename; + + public HuffmanBuild(String filename) { + hash_map = new HashMap(); + new_hash_map = new HashMap(); + this.filename = filename; + } + + private void makeFrequencyMap(Character c) { + + if (hash_map.containsKey(c)) { + hash_map.put(c, hash_map.get(c) + 1); + } else { + hash_map.put(c, 1); + } + } + + private void makePriorityQueue() { + int size = hash_map.size(); + q = new PriorityQueue(size, new MyComparator()); + + for (Character alphabet : hash_map.keySet()) { + HuffmanNode hn = new HuffmanNode(); + + hn.c = alphabet; + hn.data = hash_map.get(alphabet); + + hn.left = null; + hn.right = null; + + q.add(hn); + } + + generateHuffmanTree(); + } + + private void generateHuffmanTree() { + + HuffmanNode root = null; + + while (q.size() > 1) { + + HuffmanNode x = q.peek(); + q.poll(); + + HuffmanNode y = q.peek(); + q.poll(); + + HuffmanNode f = new HuffmanNode(); + + f.data = x.data + y.data; + f.c = '-'; + + f.left = x; + f.right = y; + + root = f; + + q.add(f); + } + + generateCharCode(root, ""); + printMap(); + printCode(); + + } + + private void generateCharCode(HuffmanNode root, String s) { + + if (root.left == null && root.right == null) { + // System.out.println(root.c + ":" + s); + new_hash_map.put(root.c, s); + return; + } + + generateCharCode(root.left, s + "0"); + generateCharCode(root.right, s + "1"); + } + + private void printCode() { + File file; + + try { + + file = new File(filename); + BufferedReader br = new BufferedReader(new FileReader(file)); + + String line; + StringBuilder sb = new StringBuilder(); + + while ((line = br.readLine()) != null) { + + for(int i=0; i length ) { + insetEnd(data); + } else { + + int i=1; + Node n = start; + + while( n.fLink != null ) { + i++; + if( i == pos) break; + n = n.fLink; + } + + Node newNode = new Node(data); + + newNode.bLink = n; + newNode.fLink = n.fLink; + n.fLink.bLink = newNode; + n.fLink = newNode; + + length++; + + } + } + + public void deleteBeg() { + if(start == null) { + System.out.println("list empty"); + } else { + start = n.fLink; + start.bLink = null; + } + + length--; + } + + public void deleteEnd() { + if(start == null) { + System.out.println("list empty"); + } else { + Node n = start; + + while(n.fLink.fLink != null) { + n = n.fLink; + } + + n.fLink.bLink = null; + n.fLink = null; + length--; + } + } + + + public void displayForward() { + Node n = start; + while(n.fLink != null) { + System.out.print(n.data + " -> "); + n = n.fLink; + } + System.out.print(n.data + " "); + } + + public void displayBackward() { + Node n = start; + while(n.fLink != null) { + n = n.fLink; + } + + while(n.bLink != null) { + System.out.print(n.data + " <- "); + n = n.bLink; + } + System.out.print(n.data + " "); + } + + public static void main(String[] args) { + doubleLinklist dl = new doubleLinklist(); + + dl.insertBeg(10); + dl.insertBeg(20); + dl.insertBeg(30); + dl.insetEnd(40); + + dl.insetPos(2,4); + + dl.displayForward(); // 30 -> 20 -> 10 -> 2 -> 40 + System.out.println(); + + dl.deleteEnd(); + dl.deleteBeg(); + + dl.displayForward(); // 20 -> 10 -> 2 + System.out.println(); + + dl.displayBackward(); // 2 <- 10 <- 20 + } +} \ No newline at end of file diff --git a/Java/data-structures/LinkedList.java b/Java/data-structures/LinkedList.java new file mode 100644 index 0000000..625de32 --- /dev/null +++ b/Java/data-structures/LinkedList.java @@ -0,0 +1,165 @@ +class Node { + int data; + Node link; + + public Node(int data) { + this.data = data; + this.link = null; + } + + public int getData() { + return data; + } +} + +class LinkedList { + private Node start; + private int length; + + LinkedList() { + start = null; + length = 0; + } + + public void insertBeg(int data) { + Node newNode = new Node(data); + + if(start == null) { + start = newNode; + }else { + newNode.link = start; + start = newNode; + } + + length++; + } + + public void insertEnd(int data) { + Node newNode = new Node(data); + + if(start == null) { + start = newNode; + }else { + Node n = start; + + while(n.link != null) { + n = n.link; + } + + n.link = newNode; + } + + length++; + } + + public void insetPos(int data, int pos) { + if(pos < 0) { + System.out.println("Pos does not"); + return; + } + + if(pos == 1) { + insertBeg(data); + } else if( pos > length) { + insertEnd(data); + } else { + int i=1; + Node n = start; + + while( n.link != null ) { + i++; + if( i == pos) break; + n = n.link; + } + + Node newNode = new Node(data); + newNode.link = n.link; + n.link = newNode; + + length++; + } + } + + public void deleteBeg() { + if(start == null) { + System.out.println("linkedlist Empty"); + } else { + start = start.link; + length--; + } + } + + public void deleteEnd() { + if(start == null) { + System.out.println("linkedlist Empty"); + } else if(start.link == null) { + start = null; + length = 0; + } else { + Node n = start; + + while(n.link.link != null) { + n = n.link; + } + + n.link = null; + length--; + } + } + + public void deletePos(int pos) { + if(pos < 0) { + System.out.println("Pos does not"); + return; + } + + if(pos == 1) { + deleteBeg(); + } else if( pos > length) { + deleteEnd(); + } else { + int i=1; + Node n = start; + + while( n.link != null ) { + i++; + if( i == pos) break; + n = n.link; + } + + n.link = n.link.link; + length--; + } + } + + public void display() { + Node n = start; + + while(n != null) { + System.out.print(n.data + " "); + n = n.link; + } + System.out.println(); + } + + public static void main(String[] args) { + LinkedList sl = new LinkedList(); + + sl.insertBeg(10); + sl.insertBeg(20); + sl.insertBeg(30); + sl.insertEnd(40); + + sl.insetPos(60,5); + sl.insetPos(5,5); + + sl.display(); + sl.deleteBeg(); + sl.display(); + sl.deleteEnd(); + sl.display(); + sl.deletePos(2); + sl.display(); + } + +}