Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

84 строки
2.2KB

  1. #include<stdio.h>
  2. #include<cstdlib>
  3. // Ein Schlangenelement
  4. struct QueueElem {
  5. QueueElem* next; // Zeiger auf nächstes Element
  6. int value; // Daten zu diesem Element
  7. } ;
  8. // Eine Schlange
  9. struct Queue {
  10. int count; // Anzahl Elemente in der Liste
  11. QueueElem* first; // Zeiger auf erstes Element der Liste
  12. } ;
  13. // Initialisiere eine Schlange
  14. void empty_queue (Queue* l)
  15. {
  16. l->first = 0; // 0 ist keine gueltige Adresse: Liste ist leer
  17. l->count = 0;
  18. }
  19. // Fuege ein Element ans Ende der Schlange an
  20. void add_to_queue (Queue* queue, QueueElem* elem)
  21. {
  22. // Laufpointer
  23. QueueElem* current = queue->first;
  24. if (queue->first == 0) { // if queue is empty, put the new element as the first one
  25. queue->first = elem;
  26. return;
  27. }
  28. // find last element of list
  29. while (current->next != 0) {
  30. current = current->next;
  31. }
  32. current->next = elem; // set new element as the follower of the old last one
  33. queue->count = queue->count + 1; // increment queue size
  34. }
  35. // Entferne das erste Element der Schlange
  36. QueueElem* remove_from_queue(Queue* queue)
  37. {
  38. QueueElem* p; // das entfernte Element
  39. if (queue->first == 0) { // check if list is empty
  40. return p; // then just return null pointer
  41. } else {
  42. p = queue->first; // return the first element of the queue
  43. queue->first = p->next; // set the second to be the new first
  44. queue->count = queue->count-1; // decrement queue size
  45. return p; // return the removed element
  46. }
  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. }