Website Summary Files Commits Branches @commit @diff @stats
path: root / Additional / Additional-2023-SI / queue-insertion.cpp
diff options
context:
space:
mode:
Commit9eed63a37a808c59990feaaaa3e1725dfdd31f3c (patch)
Author
 Stoycho Kyosev <stoycho.kk@gmail.com>
2023-10-30 22:33:14 +0200
Committer
 Stoycho Kyosev <stoycho.kk@gmail.com>
2023-10-30 22:33:14 +0200
Filesbc22e2b8407f9207c7a5a8ef999f41446c0cee19 /Additional/Additional-2023-SI/queue-insertion.cpp
Data-structures-and-algorithms-9eed63a37a808c59990feaaaa3e1725dfdd31f3c.tar
Data-structures-and-algorithms-9eed63a37a808c59990feaaaa3e1725dfdd31f3c.tar.gz
Data-structures-and-algorithms-9eed63a37a808c59990feaaaa3e1725dfdd31f3c.zip
Parent0f17a224d2934c748b32b908f74724b3299d263a (diff)
Add SI consultation
1 files changed, 109 insertions, 0 deletions
-rw-r--r--Additional/Additional-2023-SI/queue-insertion.cpp109
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