Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.02 KB | None | 0 0
  1. /*
  2.  * CppLists.cpp
  3.  *
  4.  *  Created on: May 9, 2010
  5.  *      Author: Daan Janssens
  6.  */
  7.  
  8. #include "CppLists.h"
  9. #include <iostream>
  10.  
  11.  
  12. namespace CppLists
  13. {
  14.     //constructors
  15.     List::List()
  16.     {
  17.         size = 0;
  18.         first = NULL;
  19.         last = NULL;
  20.     }
  21.     Node::Node(int value)
  22.     {
  23.             data = value;
  24.             next = NULL;
  25.             prev = NULL;
  26.     }
  27.  
  28.     // dllist functies
  29.     int size(List& myList)
  30.     {
  31.         return myList.size;
  32.     }
  33.  
  34.     void printNode(Node& myNode)
  35.     {
  36.         std::cout << myNode.data << std::endl;
  37.     }
  38.  
  39.  
  40.     void print(List& myList)
  41.         {
  42.             std::cout << "De lijst bevat: " << std::endl;
  43.             Node* tempNode = myList.first;
  44.             while (tempNode != NULL)
  45.             {
  46.                 printNode(*tempNode);
  47.                 tempNode = tempNode->next;
  48.             }
  49.         }
  50.  
  51.  
  52.     void add(List& myList,Node& myNode)
  53.     {
  54.  
  55.         if (myList.size == 0)
  56.         {
  57.             myList.first = myList.last = &myNode;
  58.             myNode.prev = myNode.next = NULL;
  59.         }
  60.         else
  61.         {
  62.             Node* tempNode = myList.last;
  63.  
  64.             myNode.prev = tempNode;
  65.             tempNode->next = &myNode;
  66.             myList.last = &myNode;
  67.             myNode.next = NULL;
  68.         }
  69.         ++myList.size;
  70.  
  71.     }
  72.  
  73.     void add(List& myList, Node& myNode, unsigned int index)
  74.     {
  75.         if (myList.size == 0)
  76.         {
  77.             myList.first = myList.last = &myNode;
  78.             myNode.prev = myNode.next = NULL;
  79.         }
  80.         else if (index == 0)
  81.         {
  82.             Node* tempNode = myList.first;
  83.             myNode.prev = NULL;
  84.             tempNode->prev = &myNode;
  85.             myNode.next = tempNode;
  86.             myList.first = &myNode;
  87.  
  88.         }
  89.         else if (myList.size <= index)
  90.         {
  91.             Node* tempNode = myList.last;
  92.             myNode.prev = tempNode;
  93.             tempNode->next = &myNode;
  94.             myList.last = &myNode;
  95.             myNode.next = NULL;
  96.         }
  97.         else
  98.         {
  99.             Node* tempNode = myList.first;
  100.             unsigned int i = 0;
  101.             while (i < index)
  102.             {
  103.                 tempNode = tempNode->next;
  104.                 ++i;
  105.             }
  106.             myNode.next = tempNode;
  107.             myNode.prev = tempNode->prev;
  108.             tempNode->prev->next = &myNode;
  109.             tempNode->prev = &myNode;
  110.         }
  111.         ++myList.size;
  112.     }
  113.  
  114.     void addFirst(List& myList,Node& myNode)
  115.     {
  116.         Node* tempNode = myList.first;
  117.         myNode.prev = NULL;
  118.         tempNode->prev = &myNode;
  119.         myNode.next = tempNode;
  120.         myList.first = &myNode;
  121.         ++myList.size;
  122.     }
  123.  
  124.     void addLast(List& myList,Node& myNode)
  125.     {
  126.         Node* tempNode = myList.last;
  127.         myNode.prev = tempNode;
  128.         tempNode->next = &myNode;
  129.         myList.last = &myNode;
  130.         myNode.next = NULL;
  131.         ++myList.size;
  132.     }
  133.  
  134.     void clear(List& myList)
  135.     {
  136.  
  137.         myList.size = 0;
  138.         myList.first = NULL;
  139.         myList.last = NULL;
  140.  
  141.     }
  142.  
  143.     bool contains(List& myList, Node& myNode)
  144.     {
  145.         for(unsigned int i=0; i <= myList.size; ++i)
  146.         {
  147.             if( myNode.data == get(myList,i))
  148.             {
  149.                 return true;
  150.             }
  151.         }
  152.         return false;
  153.  
  154.     }
  155.  
  156.     int getFirst(List& myList)
  157.     {
  158.         return myList.first->data;
  159.     }
  160.  
  161.     int getLast(List& myList)
  162.     {
  163.         return myList.last->data;
  164.     }
  165.  
  166.     int get(List& myList, unsigned int index)
  167.     {
  168.         if (myList.size <= index)
  169.         {
  170.             return myList.last->data;
  171.         }
  172.         else
  173.         {
  174.             Node* tempNode = myList.first;
  175.             unsigned int i = 0;
  176.             while (i < index)
  177.             {
  178.                 tempNode = tempNode->next;
  179.                 ++i;
  180.             }
  181.             return tempNode->data;
  182.         }
  183.     }
  184.  
  185.     void removeFirst(List& myList)
  186.     {
  187.         myList.first = myList.first->next;
  188.         myList.first->prev = NULL;
  189.         --myList.size;
  190.     }
  191.  
  192.     void removeLast(List& myList)
  193.     {
  194.         myList.last = myList.last->prev;
  195.         myList.last->next = NULL;
  196.         --myList.size;
  197.     }
  198.  
  199.     void remove(List& myList, unsigned int index)
  200.     {
  201.         if (myList.size == 0)
  202.         {
  203.             std::cout << "List is empty and nothing can be removed.." << std::endl;
  204.         }
  205.         else if (index == 0)
  206.         {
  207.             removeFirst(myList);
  208.         }
  209.         else if (myList.size <= index)
  210.         {
  211.             removeLast(myList);
  212.         }
  213.         else
  214.         {
  215.             Node* tempNode = myList.first;
  216.             unsigned int i = 0;
  217.             while (i < index)
  218.             {
  219.                 tempNode = tempNode->next;
  220.                 ++i;
  221.             }
  222.             tempNode->next->prev = tempNode->prev;
  223.             tempNode->prev->next = tempNode->next;
  224.             --myList.size;
  225.         }
  226.  
  227.  
  228.     }
  229.  
  230.  
  231. /*  int compare(Node& node1, Node& node2)
  232.     {
  233.         if (node1.data > node2.data)
  234.         {
  235.             return -1;
  236.         }
  237.         else if (node1.data == node2.data)
  238.         {
  239.             return 0;
  240.         }
  241.         else
  242.         {
  243.             return 1;
  244.         }
  245.     }
  246.  
  247.     void sortBefore(List& myList, Node& myNode)
  248.     {
  249.             Node* tempNode;
  250.             tempNode = myList.first;
  251.             while(1)
  252.             {
  253.                 int c;
  254.                 c = compare(*tempNode,myNode);
  255.                 if( c == 1)
  256.                 {
  257.                     if (tempNode->prev == NULL)
  258.                     {
  259.                         myList.first = &myNode;
  260.                     }
  261.  
  262.                     if ( myNode.next == NULL)
  263.                     {
  264.                         myList.last = myNode.prev;
  265.                     }
  266.  
  267.                     myNode.prev->next = myNode.next;
  268.                     myNode.next->prev = myNode.prev;
  269.  
  270.                     myNode.prev = tempNode->prev;
  271.                     if ( tempNode->prev != NULL)
  272.                     {
  273.                         tempNode->prev->next = &myNode;
  274.                     }
  275.                     tempNode->prev = &myNode;
  276.                     myNode.next = tempNode;
  277.  
  278.                     return;
  279.  
  280.                 }
  281.                 tempNode = tempNode->next;
  282.             }
  283.     }
  284.  
  285.     void sort(List& myList)
  286.     {
  287.         Node* currentNode;
  288.         currentNode = myList.first;
  289.         while ( currentNode->next != NULL)
  290.         {
  291.             int c;
  292.             c = compare(*currentNode, *currentNode->next);
  293.             if ( c == 1 )
  294.             {
  295.                 sortBefore(myList, *currentNode->next);
  296.             }
  297.             else
  298.             {
  299.                 currentNode = currentNode->next;
  300.             }
  301.  
  302.         }
  303.     }
  304.     */
  305.  
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement