Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include <ctime>
  4. #include <chrono>
  5. using namespace std::chrono;
  6. using namespace std;
  7.  
  8.  
  9. // Create einfach und doppelt verkettete Listen
  10. struct node {
  11. int data;
  12. struct node *next;
  13. };
  14.  
  15. struct node* front = NULL;
  16. struct node* rear = NULL;
  17. struct node* temp;
  18.  
  19. struct dlist {
  20. dlist * prev;
  21. int data_1;
  22. dlist * next_1;
  23. };
  24.  
  25. dlist *first, *current, *previos, *tamp;
  26. int dlinklist_counter = 0;
  27.  
  28. // Insert Funktion für einfach verkettete Liste
  29. void Insert(int val)
  30. {
  31. if (rear == NULL) {
  32. rear = (struct node *)malloc(sizeof(struct node));
  33. rear->next = NULL;
  34. rear->data = val;
  35. front = rear;
  36. } else {
  37. temp=(struct node *)malloc(sizeof(struct node));
  38. rear->next = temp;
  39. temp->data = val;
  40. temp->next = NULL;
  41. rear = temp;
  42. }
  43. }
  44.  
  45. // Delete Funktion für einfach verkettete Liste
  46. void Delete() {
  47. temp = front;
  48. if (front == NULL) {
  49. cout<<"Underflow"<<endl;
  50. return;
  51. }
  52. else
  53. if (temp->next != NULL) {
  54. temp = temp->next;
  55. free(front);
  56. front = temp;
  57. } else {
  58. free(front);
  59. front = NULL;
  60. rear = NULL;
  61. }
  62. }
  63.  
  64.  
  65. // Insert doppelt verkettete Liste
  66. void dlinklist_insert(int val)
  67. {
  68. current = new dlist;
  69. if (dlinklist_counter == 0)
  70. {
  71. previos = current;
  72. first = current;
  73. current->prev = NULL;
  74. current->data_1 = val;
  75. }
  76. else
  77. {
  78. cout<< val <<endl;
  79. previos->next_1 = current;
  80. current->prev = previos;
  81. previos = current;
  82. current->data_1 = val;
  83. }
  84. current->next_1 = NULL;
  85. dlinklist_counter++;
  86. }
  87.  
  88. // Delete Doppelt verkette Liste
  89. void dlinklist_dequeu()
  90. {
  91. if (dlinklist_counter == 0)
  92. {
  93. cout << " Queue is empty";
  94. system("pause");
  95. }
  96. else
  97. {
  98. first = first->next_1;
  99.  
  100. dlinklist_counter--;
  101. }
  102. }
  103.  
  104.  
  105. int main()
  106. {
  107. // Länge der Listen
  108. int n = 1000000;
  109. // Dynamische Speicherverwaltung für Array, das random Zahlen beinhaltet
  110. int* q = new int[n];
  111.  
  112. // Array wird mit Random Zahlen gefüllt, man könnte auch direkt die Liste füllen, aber so wird sichergestellt, dass beide Listen mit den selben Zahlen gefüllt werden
  113. for(int i= 0; i<=n; i++)
  114. {
  115. int huan = rand();
  116. q[i] = huan;
  117. }
  118.  
  119. // Starte Zeitmessung für einfach verkettete Liste
  120. std::chrono::time_point<std::chrono::system_clock> start, end;
  121. start = std::chrono::system_clock::now();
  122.  
  123. // Insert Random Zahlen in Liste
  124. for(int i= 0; i<=n; i++)
  125. {
  126. Insert(q[i]);
  127. }
  128.  
  129. // Lösche Random Zahlen aus Liste
  130. for(int i= 0; i<=n; i++)
  131. {
  132. Delete();
  133. }
  134. // Stoppe Zeitmessung
  135. end = std::chrono::system_clock::now();
  136.  
  137. // Starte 2. Zeitmessung
  138. std::chrono::time_point<std::chrono::system_clock> start_1, end_1;
  139. start_1 = std::chrono::system_clock::now();
  140.  
  141. // gleuch wie oben nur für doppelt verkettete Liste
  142. for(int i= 0; i<=n; i++)
  143. {
  144. dlinklist_insert(q[i]);
  145. }
  146.  
  147. for(int i= 0; i<=n; i++)
  148. {
  149. dlinklist_dequeu();
  150. }
  151.  
  152. end_1 = std::chrono::system_clock::now();
  153.  
  154. // Berechne Differenz der Zeitmessungen
  155. int elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>
  156. (end-start).count();
  157.  
  158. int elapsed_seconds_1 = std::chrono::duration_cast<std::chrono::seconds>
  159. (end_1-start_1).count();
  160.  
  161. // gebe Zeit aus
  162. cout << "Dauer einfache Liste:";
  163. cout << elapsed_seconds << endl;
  164. cout << "Dauer doppelte Liste:";
  165. cout << elapsed_seconds_1 << endl;
  166.  
  167.  
  168.  
  169.  
  170.  
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement