Advertisement
ZergRushA

os-prakt

Dec 12th, 2022
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. // #include <windows.h>
  2. #include <iostream>
  3. #include <bits/stdc++.h>
  4. #define MEMORY_SIZE 1024
  5. using namespace std;
  6.  
  7. struct Queue{
  8.     int front, rear, capacity, temp;
  9.     int* queue;
  10.     Queue(int c)
  11.     {
  12.         front = rear = 0;
  13.         capacity = c;
  14.         queue = new int;
  15.     }
  16.  
  17.     ~Queue() { delete[] queue; }
  18.  
  19.  
  20.     bool empty(){
  21.         return front == rear;
  22.     }
  23.    
  24.     void empty_or_not(){
  25.         if (empty()){
  26.             cout << "Queue is empty" << endl;
  27.         }
  28.        
  29.         else{
  30.             cout << "Queue is not empty"<<endl;
  31.         }
  32.     }
  33.  
  34.     void Enqueue(int data)
  35.     {
  36.         if (capacity == rear) {
  37.             printf("\nQueue is full\n");
  38.             return;
  39.         }
  40.  
  41.         else {
  42.            
  43.             /* links to material: https://tdoc.ru/c/cpp-sources/win32/virtualalloc-i-virtualfree.html
  44.             and https://learn.microsoft.com/en-us/windows/win32/Memory/reserving-and-committing-memory
  45.            
  46.             все это должно добавлять в массив объекты размером в 20Кб (не пробовал, т.к. онлайн комплиятор не поддерживает windows.
  47.             а устанавливать расширение для MS VS не хочется (долго) )
  48.            
  49.             cout << "Enter your element (only int value): "
  50.             cin >> queue[rear];
  51.             VirtualAlloc(NULL, 20*MEMORY_SIZE, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  52.             */
  53.             queue[rear] = data;
  54.             rear++;
  55.             cout << "\n" << data << " was added in queue" << endl;
  56.         }
  57.        
  58.        
  59.         return;
  60.     }
  61.  
  62.     void Dequeue()
  63.     {  
  64.        
  65.         if (empty()) {
  66.             printf("\nQueue is empty\n");
  67.             return;
  68.         }
  69.         else{
  70.        
  71.             temp = queue[front];
  72.             for (int i = 0; i < rear - 1; i++) {
  73.                 queue[i] = queue[i + 1];
  74.             }
  75.             rear--;
  76.         }
  77.        
  78.         cout << temp << " was deleted from queue"<< endl;
  79.         return;
  80.     }
  81.  
  82.  
  83.     void view_head()
  84.     {
  85.         if (empty()) {
  86.             printf("\nQueue is Empty\n");
  87.             return;
  88.         }
  89.         else{
  90.             printf("Head Element is: %d ", queue[front]);
  91.            
  92.         }
  93.         return;
  94.     }
  95.    
  96.    
  97.     void show_queue(){
  98.         int i;
  99.         if (empty()){
  100.             printf("\nQueue is empty\n");
  101.             return;
  102.         }
  103.         else{
  104.             cout << endl;
  105.             cout << "Queue elements: ";
  106.             for (i = front; i < rear; i++) {
  107.                 printf("%d ", queue[i]);
  108.                  
  109.              }
  110.             return;
  111.         }
  112.     }
  113.    
  114.     void swap_head(){
  115.         if (empty()){
  116.             printf("\nQueue is empty\n");
  117.             return;
  118.         }
  119.        
  120.         else{
  121.             temp = queue[front];
  122.             //cout << "\n" <<temp << endl;
  123.             queue[front] = queue[rear-1];
  124.             //cout << "\n" <<queue[front] << endl;
  125.             queue[rear-1] = temp;
  126.         }
  127.     }
  128. };
  129.  
  130.  
  131. int main(){
  132.    
  133.     Queue q(5);
  134.    
  135.     q.empty_or_not();
  136.     cout << "\nAfter enquing elements:" << endl;
  137.     q.Enqueue(1);
  138.     q.empty_or_not();
  139.     q.Enqueue(2);
  140.     q.Enqueue(3);
  141.     cout << "\nBefore swapping head to tail:" << endl;
  142.     q.show_queue();
  143.    
  144.     q.swap_head();
  145.     cout << "\nAfter swapping head to tail:" << endl;
  146.     q.show_queue();
  147.     cout << endl;
  148.     q.view_head();
  149.     return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement