Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

85 Zeilen
2.0KB

  1. #include<stdio.h>
  2. #include<cstdlib>
  3. // Ein Queue Element
  4. struct QueueElem {
  5. QueueElem* next; // Zeiger auf nächstes Element
  6. QueueElem* previous; // Zeiger auf vorheriges Element
  7. int value; // Daten zu diesem Element
  8. } ;
  9. // Eine Queue
  10. struct Queue {
  11. int count; // Anzahl Elemente in der queuee
  12. QueueElem* first; // Zeiger auf erstes Element der queue
  13. QueueElem* last; // Zeiger auf letztes Element der queue
  14. } ;
  15. // Initialisiere eine queue
  16. void empty_queue (Queue* l)
  17. {
  18. l->first = 0; // 0 ist keine gueltige Adresse: queue ist leer
  19. l->last = 0;
  20. l->count = 0;
  21. }
  22. // Fuege neues Element am Ende der Schlange ein
  23. void add_to_queue(Queue* queue, QueueElem* elem)
  24. {
  25. if (queue->last == 0) {
  26. queue->first = elem;
  27. queue->last = elem;
  28. } else {
  29. queue->last->next = elem;
  30. elem->next = 0;
  31. elem->previous = queue->last;
  32. queue->last = elem;
  33. }
  34. queue->count = queue->count + 1;
  35. }
  36. // Remove last Element from queue and return it
  37. QueueElem* remove_from_queue (Queue* queue)
  38. {
  39. if (queue->first == 0) {
  40. return 0; // return null if queue is empty
  41. }
  42. QueueElem* p;
  43. p = queue->first;
  44. queue->first = p->next;
  45. queue->count = queue->count -1;
  46. return p;
  47. }
  48. // print a queue
  49. void print_queue(Queue* queue) {
  50. // index pointer
  51. QueueElem* current = queue->first;
  52. printf("Queue: ");
  53. // print every element until the last
  54. while (current != 0) {
  55. printf("%d ", current->value);
  56. current = current->next;
  57. }
  58. printf("\n");
  59. }
  60. int main() {
  61. // create a queue
  62. Queue* queue = new Queue();
  63. empty_queue(queue);
  64. // and some elements
  65. for (int i = 0; i < 100000; i++) {
  66. QueueElem* elem = new QueueElem();
  67. elem -> value = rand();
  68. add_to_queue(queue, elem);
  69. }
  70. // and remove them again
  71. for (int i = 0; i < 100000; i++) {
  72. remove_from_queue(queue);
  73. }
  74. // check if queue is empty
  75. print_queue(queue);
  76. }