diff options
1 files changed, 109 insertions, 0 deletions
| -rw-r--r-- | Additional/Additional-2023-SI/queue-insertion.cpp | 109 |
diff --git a/Additional/Additional-2023-SI/queue-insertion.cpp b/Additional/Additional-2023-SI/queue-insertion.cpp new file mode 100644 index 0000000..f27416a --- /dev/null +++ b/Additional/Additional-2023-SI/queue-insertion.cpp @@ -0,0 +1,109 @@ +#include <iostream> + +struct Node +{ + Node* next = nullptr; + int data = 0; + Node(int data, Node* next = nullptr) : data(data), next(next){} +}; + +struct Queue +{ + Node* head = nullptr; + Node* tail = nullptr; +}; + +void push(Queue& q, int el) +{ + if (q.head == nullptr) + q.head = q.tail = new Node(el); + else + { + Node* newNode = new Node(el); + q.tail->next = newNode; + + q.tail = newNode; + } +} +void pop(Queue& q) +{ + if (!q.head) + return; + Node* toDelete = q.head; + q.head = q.head->next; + delete toDelete; +} + +void insert(Queue& q, int el) +{ + Node* iter = q.head; + + while (iter) + { + if (iter->data % 10 == el % 10) + { + break; + } + iter = iter->next; + } + + if (iter) + { + Node* newNode = new Node(el); + newNode->next = iter->next; + iter->next = newNode; + } + else + { + if (!q.head) + { + Node* newNode = new Node(el); + q.head = q.tail = newNode; + } + else + { + Node* newNode = new Node(el); + q.tail->next = newNode; + q.tail = newNode; + } + } +} + +void print(const Queue& q) +{ + const Node* it = q.head; + + while(it) + { + std::cout << it->data << " "; + + it = it->next; + } +} +void free(Queue& q) +{ + while (q.head) + { + Node* toDelete = q.head; + q.head = q.head->next; + + delete toDelete; + } + +} +int main() +{ + Queue q; + + push(q, 1); + push(q, 2); + push(q, 4); + push(q, 8); + push(q, 16); + + insert(q, 12); + + print(q); + + free(q); +}
\ No newline at end of file |
