that_one_nigga_you_k

classes de vector, queue e stack

Aug 6th, 2024
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.81 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. // Vector Class
  4. template <typename T>
  5. class Vector {
  6. private:
  7.     T* data;
  8.     size_t capacity;
  9.     size_t size;
  10.  
  11.     void resize(size_t new_capacity) {
  12.         T* new_data = new T[new_capacity];
  13.         for (size_t i = 0; i < size; ++i) {
  14.             new_data[i] = data[i];
  15.         }
  16.         delete[] data;
  17.         data = new_data;
  18.         capacity = new_capacity;
  19.     }
  20.  
  21. public:
  22.     Vector() : data(nullptr), capacity(0), size(0) {}
  23.  
  24.     ~Vector() {
  25.         delete[] data;
  26.     }
  27.  
  28.     void push_back(const T& value) {
  29.         if (size == capacity) {
  30.             resize(capacity == 0 ? 1 : 2 * capacity);
  31.         }
  32.         data[size++] = value;
  33.     }
  34.  
  35.     void pop_back() {
  36.         if (size > 0) {
  37.             --size;
  38.         }
  39.     }
  40.  
  41.     T& operator[](size_t index) {
  42.         return data[index];
  43.     }
  44.  
  45.     const T& operator[](size_t index) const {
  46.         return data[index];
  47.     }
  48.  
  49.     size_t getSize() const {
  50.         return size;
  51.     }
  52. };
  53.  
  54. // Queue Class
  55. template <typename T>
  56. class Queue {
  57. private:
  58.     struct Node {
  59.         T data;
  60.         Node* next;
  61.         Node(const T& data) : data(data), next(nullptr) {}
  62.     };
  63.  
  64.     Node* front;
  65.     Node* back;
  66.     size_t size;
  67.  
  68. public:
  69.     Queue() : front(nullptr), back(nullptr), size(0) {}
  70.  
  71.     ~Queue() {
  72.         while (!isEmpty()) {
  73.             dequeue();
  74.         }
  75.     }
  76.  
  77.     void enqueue(const T& value) {
  78.         Node* newNode = new Node(value);
  79.         if (isEmpty()) {
  80.             front = back = newNode;
  81.         } else {
  82.             back->next = newNode;
  83.             back = newNode;
  84.         }
  85.         ++size;
  86.     }
  87.  
  88.     void dequeue() {
  89.         if (!isEmpty()) {
  90.             Node* temp = front;
  91.             front = front->next;
  92.             delete temp;
  93.             --size;
  94.         }
  95.     }
  96.  
  97.     T& getFront() {
  98.         return front->data;
  99.     }
  100.  
  101.     const T& getFront() const {
  102.         return front->data;
  103.     }
  104.  
  105.     bool isEmpty() const {
  106.         return size == 0;
  107.     }
  108.  
  109.     size_t getSize() const {
  110.         return size;
  111.     }
  112. };
  113.  
  114. // Stack Class
  115. template <typename T>
  116. class Stack {
  117. private:
  118.     struct Node {
  119.         T data;
  120.         Node* next;
  121.         Node(const T& data) : data(data), next(nullptr) {}
  122.     };
  123.  
  124.     Node* top;
  125.     size_t size;
  126.  
  127. public:
  128.     Stack() : top(nullptr), size(0) {}
  129.  
  130.     ~Stack() {
  131.         while (!isEmpty()) {
  132.             pop();
  133.         }
  134.     }
  135.  
  136.     void push(const T& value) {
  137.         Node* newNode = new Node(value);
  138.         newNode->next = top;
  139.         top = newNode;
  140.         ++size;
  141.     }
  142.  
  143.     void pop() {
  144.         if (!isEmpty()) {
  145.             Node* temp = top;
  146.             top = top->next;
  147.             delete temp;
  148.             --size;
  149.         }
  150.     }
  151.  
  152.     T& peek() {
  153.         return top->data;
  154.     }
  155.  
  156.     const T& peek() const {
  157.         return top->data;
  158.     }
  159.  
  160.     bool isEmpty() const {
  161.         return size == 0;
  162.     }
  163.  
  164.     size_t getSize() const {
  165.         return size;
  166.     }
  167. };
  168.  
  169. int main() {
  170.     // Vector example
  171.     Vector<int> vec;
  172.     vec.push_back(1);
  173.     vec.push_back(2);
  174.     vec.push_back(3);
  175.  
  176.     std::cout << "Vector: ";
  177.     for (size_t i = 0; i < vec.getSize(); ++i) {
  178.         std::cout << vec[i] << " ";
  179.     }
  180.     std::cout << std::endl;
  181.  
  182.     // Queue example
  183.     Queue<int> q;
  184.     q.enqueue(1);
  185.     q.enqueue(2);
  186.     q.enqueue(3);
  187.  
  188.     std::cout << "Queue: ";
  189.     while (!q.isEmpty()) {
  190.         std::cout << q.getFront() << " ";
  191.         q.dequeue();
  192.     }
  193.     std::cout << std::endl;
  194.  
  195.     // Stack example
  196.     Stack<int> stack;
  197.     stack.push(1);
  198.     stack.push(2);
  199.     stack.push(3);
  200.  
  201.     std::cout << "Stack: ";
  202.     while (!stack.isEmpty()) {
  203.         std::cout << stack.peek() << " ";
  204.         stack.pop();
  205.     }
  206.     std::cout << std::endl;
  207.  
  208.     return 0;
  209. }
  210.  
Add Comment
Please, Sign In to add comment