coplate

All Three

May 19th, 2014
762
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.47 KB | None | 0 0
  1. #include <ctime>
  2. #include <iostream>
  3. #include <vector>
  4. #include <list>
  5. #include <stdlib.h>
  6. #include <algorithm>
  7. #include <functional>
  8. #include <time.h>
  9. int entries = 10000;
  10.  
  11. typedef struct node {
  12.         int val;
  13.         struct node * next;
  14. } node_t;
  15.  
  16. void add_to_list(node_t **list, int value){
  17.         node_t *tmp = *list;
  18.         node_t * new_node = (node_t *)malloc(sizeof(node_t));
  19.         new_node->val=value;
  20.         new_node->next = NULL;
  21.         if( value <= tmp->val){
  22.                 new_node->next = tmp;
  23.                 *list = new_node;
  24.                 return;
  25.         }
  26.         while( tmp->next ){
  27.                 if( value <= tmp->next->val ){
  28.                         new_node->next = tmp->next;
  29.                         tmp->next = new_node;
  30.                         return;
  31.                 }
  32.                 tmp = tmp->next;
  33.         }
  34.         tmp->next = new_node;
  35.  
  36.         return;
  37. }
  38. void remove_from_list(node_t **list, size_t element){
  39.         size_t location = 0;
  40.         node_t *tmp = *list;
  41.         node_t * parent;
  42.  
  43.         if( element == 0 ){
  44.                 *list = tmp->next;
  45.                 free(tmp);
  46.                 return;
  47.         }
  48.         while(tmp){
  49.                 if( location == element ){
  50.                         parent->next = tmp->next;
  51.                         free(tmp);
  52.                         break;
  53.                 }
  54.                 location++;
  55.                 parent = tmp;
  56.                 tmp = tmp->next;
  57.         }
  58.  
  59. }
  60. void print_list(node_t *list){
  61.         node_t *tmp = list;
  62.         while( tmp != NULL ){
  63.                 std::cout<<tmp->val<<" ";
  64.                 tmp = tmp->next;
  65.         }
  66.         std::cout<<"\n";
  67. }
  68. template<typename C>
  69. void insert_ordered(C& c, typename C::value_type x)
  70. {
  71.         typename C::iterator i = std::find_if(c.begin(), c.end(),
  72.                 std::bind1st(std::less<int>(),x)
  73.         );
  74.         if (i == c.end())
  75.                 c.push_back(x);
  76.         else
  77.                 c.insert(i, x);
  78. }
  79.  
  80. template<typename C>
  81. void erase_element(C& c, size_t member)
  82. {
  83.     size_t i = 0;
  84.     typename C::iterator it = c.begin();
  85.  
  86.     for( size_t i = 0; i < member; i++ ){
  87.      i++;
  88.  
  89.     }
  90.         c.erase(it);
  91.         return;
  92.  
  93. }
  94. template<typename C>
  95. void dump(C& c ){
  96.         for ( typename C::iterator it = c.begin(); it != c.end(); ++it){
  97.             std::cout << *it << ' ' ;
  98.         }
  99.         std::cout << "\n";
  100. }
  101.  
  102. int main (int argc, char *argv[])
  103. {
  104.         int r;
  105.         int debug = 1;
  106.  
  107.         if( argc > 1 ){
  108.                 entries = atoi(argv[1]);
  109.         }
  110.         if( argc > 2 ){
  111.                 debug = atoi(argv[2]);
  112.         }
  113.         time_t seed = time(NULL);
  114.  
  115.         // constructors used in the same order as described above:
  116.         std::vector<int> test_vector;
  117.         std::list<int> test_list;
  118.         node_t *test_link = NULL;
  119.  
  120.         time_t vec_start = time(NULL);   // get time now
  121.         srand(seed);
  122.         for (int i = 0; i < entries; ++i){
  123.                  insert_ordered(test_vector, rand());
  124.                 if( debug == 1 )
  125.                          dump(test_vector);
  126.         }
  127.  
  128.         for (int i = 0; i < entries; ++i){
  129.               if( test_vector.size() == 1 ){
  130.                  erase_element(test_vector, 0 );
  131.                 }else{
  132.                 erase_element(test_vector, rand()%(test_vector.size()-1) );    
  133.  
  134.                 }
  135.                 if( debug == 1 )
  136.                         dump(test_vector);
  137.         }
  138.         time_t vec_end = time(NULL);   // get time now
  139.  
  140.         time_t list_start = time(NULL);   // get time now
  141.         srand(seed);
  142.         for (int i = 0; i < entries; ++i){
  143.                  insert_ordered(test_list, rand());
  144.                 if( debug == 1 )
  145.                          dump(test_list);
  146.         }
  147.  
  148.         for (int i = 0; i < entries; ++i){
  149.               if( test_list.size() == 1 ){
  150.                  erase_element(test_list, 0 );
  151.                 }else{
  152.                 erase_element(test_list, rand()%(test_list.size()-1) );        
  153.  
  154.                 }
  155.                 if( debug == 1 )
  156.                         dump(test_list);
  157.         }
  158.  
  159.  
  160.         time_t list_end = time(NULL);   // get time now
  161.  
  162.         time_t link_start = time(NULL);   // get time now
  163.         srand(seed);
  164.         test_link = (node_t *)malloc(sizeof(node_t));
  165.         test_link->val = rand();
  166.         test_link->next = NULL;
  167.         if( debug == 1 )
  168.                 print_list(test_link);
  169.  
  170.         for (int i = 1; i < entries; ++i){
  171.                  add_to_list(&test_link, rand());
  172.                 if( debug == 1 )
  173.                          print_list(test_link);
  174.         }
  175.         int members = entries;
  176.         for (int i = 0; i < entries; ++i){
  177.               if( members == 1 ){
  178.                  remove_from_list(&test_link, 0);
  179.                 }else{
  180.                 remove_from_list(&test_link, rand() % (members-1));
  181.  
  182.                 }
  183.                 members--;
  184.                 if( debug == 1 )
  185.                         print_list(test_link);
  186.         }
  187.  
  188.  
  189.         time_t link_end = time(NULL);   // get time now
  190.  
  191.  
  192.         double vec_seconds = difftime(vec_end, vec_start);
  193.         double list_seconds = difftime(list_end, list_start);
  194.         double link_seconds = difftime(link_end, link_start);
  195.         std::cout.precision(2);
  196.         std::cout<<"Vector ran in "<<vec_seconds<<" seconds\nList ran in "<<list_seconds<<" Seconds\nLink ran in "<<link_seconds<<" Seconds\n";
  197.         return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment