Advertisement
Guest User

Deque

a guest
Jul 21st, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.51 KB | None | 0 0
  1. import java.util.NoSuchElementException;
  2.  
  3. public class DoublyLinkedList<E>
  4. {
  5.     public class DNode
  6.     {
  7.         E data;
  8.         DNode forward;
  9.         DNode back;
  10.     }
  11.  
  12.     private DNode head;
  13.     private DNode tail;
  14.     private int n;
  15.  
  16.     public DoublyLinkedList()
  17.     {
  18.         head = null;
  19.         tail = null;
  20.         n = 0;
  21.     }
  22.  
  23.     public boolean isEmpty()
  24.     {
  25.         return (head == null);
  26.     }
  27.  
  28.     public int size()
  29.     {
  30.         return n;
  31.     }
  32.  
  33.     public void insertAtFront(E insert)
  34.     {
  35.         DNode newHead = new DNode();
  36.  
  37.         newHead.data = insert;
  38.  
  39.         if (this.isEmpty())
  40.         {
  41.             newHead.forward = null;
  42.  
  43.             newHead.back = null;
  44.  
  45.             head = newHead;
  46.  
  47.             tail = newHead;
  48.         }
  49.         else
  50.         {
  51.             head.back = newHead;
  52.  
  53.             newHead.forward = head;
  54.  
  55.             newHead.back = null;
  56.  
  57.             head = newHead;
  58.         }
  59.  
  60.         n++;
  61.     }
  62.  
  63.     public void insertAtEnd(E insert)
  64.     {
  65.         DNode newTail = new DNode();
  66.  
  67.         newTail.data = insert;
  68.  
  69.         newTail.forward = null;
  70.  
  71.         if (this.isEmpty())
  72.         {
  73.             newTail.back = null;
  74.  
  75.             head = newTail;
  76.  
  77.             tail = newTail;
  78.         }
  79.         else
  80.         {
  81.             newTail.back = tail;
  82.  
  83.             tail.forward = newTail;
  84.  
  85.             tail = newTail;
  86.         }
  87.  
  88.         n++;
  89.     }
  90.  
  91.     public E removeFront()
  92.     {
  93.         if (this.isEmpty())
  94.             throw new NoSuchElementException();
  95.  
  96.         E removedData = head.data;
  97.  
  98.         head = head.forward;
  99.  
  100.         if (head != null)
  101.         {
  102.             head.back = null;
  103.         }
  104.  
  105.         n--;
  106.  
  107.         return removedData;
  108.     }
  109.  
  110.     public E removeEnd()
  111.     {
  112.         if (this.isEmpty())
  113.             throw new NoSuchElementException();
  114.  
  115.         E removedData = tail.data;
  116.  
  117.         tail = tail.back;
  118.  
  119.         if (tail != null)
  120.         {
  121.             tail.forward = null;
  122.         }
  123.  
  124.         n--;
  125.  
  126.         return removedData;
  127.     }
  128.  
  129.     public void insertBefore(E target, E insert)
  130.     {
  131.             DNode temp;
  132.  
  133.             for (temp = head; temp != null; temp = temp.forward)
  134.             {
  135.                 if (temp.data.equals(target))
  136.                 {
  137.                     if (temp == head)
  138.                     {
  139.                         this.insertAtFront(insert);
  140.                     }
  141.                     else
  142.                     {
  143.                         DNode newNode = new DNode();
  144.  
  145.                         newNode.data = insert;
  146.  
  147.                         newNode.forward = temp;
  148.  
  149.                         newNode.back = temp.back;
  150.  
  151.                         temp.back.forward = newNode;
  152.  
  153.                         temp.back = newNode;
  154.                     }
  155.  
  156.                     break;
  157.                 }
  158.             }
  159.        
  160.     }
  161.  
  162.     public void insertAfter(E target, E insert)
  163.     {
  164.             DNode temp;
  165.  
  166.             for (temp = head; temp != null; temp = temp.forward)
  167.             {
  168.                 if (temp.data.equals(target))
  169.                 {
  170.                     if (temp == tail)
  171.                     {
  172.                         this.insertAtEnd(insert);
  173.                     }
  174.                     else
  175.                     {
  176.                         DNode newNode = new DNode();
  177.  
  178.                         newNode.data = insert;
  179.  
  180.                         newNode.forward = temp.forward;
  181.  
  182.                         newNode.back = temp;
  183.  
  184.                         temp.forward.back = newNode;
  185.  
  186.                         temp.forward = newNode;
  187.                     }
  188.  
  189.                     break;
  190.                 }
  191.             }
  192.  
  193.         return;
  194.     }
  195.  
  196.     public void remove(E target)
  197.     {
  198.         DNode temp;
  199.  
  200.         for (temp = head; temp.forward != null; temp = temp.forward)
  201.         {
  202.             if (temp.data.equals(target))
  203.             {
  204.                 if (temp == head)
  205.                 {
  206.                     this.removeFront();
  207.                 }
  208.                 else if (temp == tail)
  209.                 {
  210.                     this.removeEnd();
  211.                 }
  212.                 else
  213.                 {
  214.                     temp.back.forward = temp.forward;
  215.  
  216.                     temp.forward.back = temp.back;
  217.  
  218.                     temp = null;
  219.  
  220.                     break;
  221.                 }
  222.             }
  223.         }
  224.        
  225.         return;
  226.     }
  227. }
  228.  
  229. import java.util.NoSuchElementException;
  230.  
  231. public class Deque<E>
  232. {
  233.     private DoublyLinkedList<E> myDeque;
  234.  
  235.     public Deque()
  236.     {
  237.         myDeque = new DoublyLinkedList<>();
  238.     }
  239.  
  240.     public boolean isEmpty()
  241.     {
  242.         return (myDeque.isEmpty());
  243.     }
  244.  
  245.     public int size()
  246.     {
  247.         return (myDeque.size());
  248.     }
  249.  
  250.     public void pushLeft(E insert)
  251.     {
  252.         myDeque.insertAtEnd(insert);
  253.     }
  254.  
  255.     public void pushRight(E insert)
  256.     {
  257.         myDeque.insertAtFront(insert);
  258.     }
  259.  
  260.     public E popLeft()
  261.     {
  262.         E removedData = myDeque.removeEnd();
  263.  
  264.         return removedData;
  265.     }
  266.  
  267.     public E popRight()
  268.     {
  269.         E removedData = myDeque.removeFront();
  270.  
  271.         return removedData;
  272.     }
  273. }
  274.  
  275. public class DequeClient
  276. {
  277.     public static void main(String[] args)
  278.     {
  279.         Deque<Integer> deque = new Deque<>();
  280.  
  281.         System.out.println("Is empty? " + deque.isEmpty() + "\t Size: " + deque.size());
  282.        
  283.         deque.pushLeft(8);
  284.         deque.pushLeft(10);
  285.         System.out.println("Size now: " + deque.size() + "\nFront element: " + deque.popRight() + "\t Size: " + deque.size());;
  286.  
  287.         deque.pushRight(12);
  288.         deque.pushRight(13);
  289.         System.out.println("Size now: " + deque.size() + "\nBack element: " + deque.popLeft() + "\t Size: " + deque.size());
  290.         System.out.println("Size now: " + deque.size() + "\nFront element: " + deque.popRight() + "\t Size: " + deque.size());
  291.  
  292.         System.out.println("Is empty? " + deque.isEmpty());
  293.  
  294.         // NullPointerException in the following command!
  295.         System.out.println("Front element: " + deque.popRight());
  296.     }
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement