Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.11 KB | None | 0 0
  1. package ListPackage;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class DoubleLinkedList implements LinkedList,Serializable {
  6.    
  7.     private class ListIterator implements Iterator,Serializable {
  8.         Node current;
  9.         boolean notAtBeginning=false;
  10.        
  11.         public ListIterator() {
  12.             current = getHead();
  13.         }
  14.        
  15.         @Override
  16.         public Object begin() {
  17.             notAtBeginning = false;
  18.             current = getHead();
  19.             return current.elem;
  20.         }
  21.  
  22.         @Override
  23.         public Object currentElem() {
  24.             return current.elem;
  25.         }
  26.  
  27.         @Override
  28.         public Object end() {
  29.             Node p = getHead();
  30.             boolean first=true;
  31.             while( ( (p != dlist[0]) || first ) ) {        
  32.                 first=false;
  33.                 p = dlist[p.next];
  34.             }
  35.            
  36.             return p.elem;
  37.         }
  38.  
  39.         @Override
  40.         public boolean hasNext() {
  41.             if(isEmpty()) return false;
  42.             if ( (current == dlist[0])&&(notAtBeginning)) {
  43.                 return false;
  44.             }
  45.             return true;
  46.         }
  47.  
  48.         @Override
  49.         public Object next() {
  50.             notAtBeginning = true;
  51.             Node p = current;
  52.             current = dlist[p.next];
  53.             return p.elem;
  54.         }
  55.        
  56.     }
  57.    
  58.     private class Node implements Serializable{
  59.         public Node(int p, int n,Object e) {
  60.             prev = p;
  61.             next = n;
  62.             try {
  63.                 elem = ((Element) e).clone();
  64.             }
  65.             catch(Exception excp) {
  66.                 //System.out.println(excp.toString());
  67.                 elem = e;
  68.             }
  69.         }
  70.         public int prev,next;
  71.         public Object elem;
  72.     }
  73.    
  74.     private Node[] dlist;
  75.     private int nrElem=0;
  76.     private int vectorSize=0;
  77.     private int headIndex=0;
  78.    
  79.    
  80.     public DoubleLinkedList() {
  81.         dlist = new Node[100];     
  82.     }
  83.    
  84.     private void resize() {
  85.         Node[] ndlist = new Node[2 * dlist.length];
  86.         for(int i=0;i<dlist.length;i++) {
  87.             ndlist[i]=dlist[i];
  88.         }
  89.         dlist = ndlist;
  90.     }
  91.    
  92.     private Node getHead() {
  93.         int i=0;    
  94.         int result=0;
  95.         boolean found=false;
  96.         while((i<vectorSize)&&(!found)) {
  97.             if (dlist[i]!=null){
  98.                 if(dlist[i].prev==-1) {
  99.                     found=true;
  100.                     result=i;
  101.                 }
  102.             }
  103.             i++;
  104.         }
  105.        
  106.         headIndex = result;
  107.         return dlist[result];
  108.     }
  109.    
  110.     private void print() {      
  111.         for(int j=0;j<vectorSize;j++) {
  112.             if(dlist[j]==null) {
  113.                 System.out.println(j+" null");
  114.             }
  115.             else {
  116.                 System.out.println(j+" "+dlist[j].elem+" "+dlist[j].prev+" "+dlist[j].next);
  117.             }
  118.         }
  119.     }
  120.    
  121.     @Override
  122.     public void append(Object e) {     
  123.         if(nrElem >= dlist.length-1) {
  124.             resize();
  125.         }
  126.        
  127.         int pos = vectorSize;
  128.         //find first null position
  129.        
  130.         int i=0;
  131.         boolean found=false;       
  132.         while( (i < vectorSize) && (!found) ) {
  133.             if((dlist[i]==null)&&(i!=0)) {
  134.                 found = true;
  135.                 pos = i;
  136.             }
  137.             i++;
  138.         }
  139.                
  140.         Node elem;
  141.         elem = new Node(0,0,e);    
  142.        
  143.         if(nrElem>0) {
  144.             Node p = getHead();
  145.             while( p.next != 0 ) {
  146.                 p = dlist[p.next];
  147.             }          
  148.            
  149.             if(p.prev!=-1) {
  150.                 elem.prev = dlist[p.prev].next;
  151.             }
  152.             else {
  153.                 elem.prev=0;
  154.             }
  155.             elem.next = 0; 
  156.            
  157.             dlist[pos] = elem;     
  158.            
  159.             p.next = pos;
  160.             if(pos == vectorSize) {
  161.                 vectorSize++;
  162.             }
  163.             nrElem++;
  164.         }
  165.         else {
  166.             elem.prev = -1;
  167.             elem.next = 0;
  168.             if(pos == vectorSize) {
  169.                 vectorSize++;
  170.             }
  171.             dlist[pos] = elem;
  172.             nrElem++;
  173.         }      
  174.     }
  175.  
  176.     @Override
  177.     public int count() {
  178.         return nrElem;     
  179.     }
  180.  
  181.     @Override
  182.     public void deleteElem(int index) throws IndexOutOfBoundsException {           
  183.        
  184.         if(index > nrElem-1) {
  185.             throw new IndexOutOfBoundsException("Index out of bounds!");
  186.         }
  187.                
  188.         Node p = getHead();    
  189.         if(p.next == 0) {
  190.             nrElem = 0;
  191.             dlist[0] = null;
  192.             vectorSize = 0;
  193.             return;
  194.         }
  195.        
  196.         int j = 0;
  197.         int realIndex=headIndex;
  198.         boolean first=true;
  199.         while( ((p != dlist[0])||first) && (j < index) ) {
  200.        
  201.             if (p.next!=0) {
  202.                 realIndex = p.next;
  203.             }
  204.            
  205.             p = dlist[p.next];
  206.             j++;
  207.         }
  208.        
  209.         if ( j == index ) {
  210.             if( p.next != 0 ) {
  211.                
  212.                 if(p.prev!=-1){
  213.                     dlist[p.prev].next = p.next;
  214.                 }
  215.                
  216.                 dlist[p.next].prev = p.prev;               
  217.                 dlist[realIndex] = null;
  218.                 nrElem--;
  219.             }
  220.             else {
  221.                 dlist[p.prev].next = 0;
  222.                 dlist[realIndex]=null;
  223.                 vectorSize--;
  224.                 nrElem--;
  225.             }          
  226.         }      
  227.     }
  228.  
  229.     @Override
  230.     public Object getElem(int index) throws IllegalRequestException {
  231.         Node p = getHead();
  232.         int i = 0;
  233.         boolean first=true;
  234.         while( ((p != dlist[0])||first) && (index != i ) ) {
  235.             p = dlist[p.next];
  236.             i++;
  237.         }
  238.         if ((index == i)&&(p!=null)) return p.elem;
  239.         else {
  240.             throw new IllegalRequestException("Could not retrieve element!");
  241.         }
  242.     }
  243.  
  244.     @Override
  245.     public Iterator getIterator() {    
  246.         return new ListIterator();
  247.     }
  248.  
  249.     @Override
  250.     public void insertElem(int index,Object e) {       
  251.         index--;       
  252.        
  253.         if(vectorSize >= dlist.length-1) {
  254.             resize();
  255.         }
  256.        
  257.         if( index < 0 ) {
  258.                 getHead();
  259.                 Node newp = new Node(-1,headIndex,e);
  260.                 dlist[headIndex].prev = vectorSize;
  261.                 dlist[vectorSize] = newp;
  262.                 vectorSize++;
  263.                 nrElem++;
  264.         }
  265.         else {
  266.             if ( index < nrElem-1 ) {
  267.                 Node p = getHead();
  268.                 int i = 0;
  269.                 boolean first=true;
  270.                 while( ( ( p != dlist[0] ) || first ) &&
  271.                         ( index != i ) ) {
  272.                     p = dlist[p.next];
  273.                     i++;
  274.                 }
  275.                
  276.                 if(index == i) {
  277.                     Node newp = new Node(0,0,e);
  278.                     int oldnext = p.next;
  279.                     newp.prev = dlist[p.next].prev;
  280.                     newp.next = oldnext;
  281.                     p.next = vectorSize;
  282.                     dlist[vectorSize] = newp;
  283.                     vectorSize++;
  284.                     nrElem++;
  285.                 }
  286.             }
  287.             else append(e);
  288.         }          
  289.                                            
  290.     }
  291.  
  292.     @Override
  293.     public boolean isEmpty() {     
  294.         return nrElem == 0;
  295.     }
  296.  
  297.     @Override
  298.     public void setElem(int index, Object e) throws IndexOutOfBoundsException {
  299.         if(index > nrElem-1) {
  300.             throw new IndexOutOfBoundsException("Index out of bounds!");
  301.         }
  302.                
  303.         Node p = getHead();
  304.         int i = 0;
  305.         boolean first=true;
  306.         while( ((p != dlist[0])||first) && (index != i ) ) {
  307.             p = dlist[p.next];
  308.             i++;
  309.         }
  310.    
  311.         if (index==i) {
  312.             try {
  313.                 p.elem = ((Element) e).clone();
  314.             }
  315.             catch(Exception excp) {            
  316.                 p.elem = e;
  317.             }
  318.         }      
  319.     }
  320. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement