diff --git a/src/array_stack.cpp b/src/array_stack.cpp index b2c1f1f..c42a005 100644 --- a/src/array_stack.cpp +++ b/src/array_stack.cpp @@ -11,15 +11,19 @@ ArrayStack::ArrayStack(int capacity) { throw std::invalid_argument("initial capacity must be greater than zero"); } - // TODO: напишите здесь свой код ... + std::fill(data_[0], data_[capacity], Element::UNDEFINED); } ArrayStack::~ArrayStack() { - // TODO: напишите здесь свой код ... + delete [] stack_; } void ArrayStack::Push(Element e) { - // TODO: напишите здесь свой код ... + if(size_ == capacity){ + data_.resize(capacity + kCapacityGrowthCoefficient); + } + data_[size_] = e; + size_ ++; } void ArrayStack::Pop() { @@ -27,17 +31,23 @@ void ArrayStack::Pop() { throw std::logic_error("cannot pop out from empty stack"); } - // TODO: напишите здесь свой код ... + data_[size_ - 1] = Element::UNDEFINED; + size_ --; } void ArrayStack::Clear() { - // TODO: напишите здесь свой код ... + std::fill(data_[0], data_[size_], Element::UNDEFINED); } void ArrayStack::resize(int new_capacity) { assert(new_capacity > size_); - // TODO: напишите здесь свой код ... + auto *new_data_ = new Element[new_capacity]; + std::copy(data_[0], data_[size_ - 1], new_data_); + std::fill(data_[size_], data_[new_capacity], Element::UNDEFINED); + delete [] data_; + data_ = new_data_; + capacity = new_capacity; } // === РЕАЛИЗОВАНО === diff --git a/src/linked_dequeue.cpp b/src/linked_dequeue.cpp index c1cdde0..96b7770 100644 --- a/src/linked_dequeue.cpp +++ b/src/linked_dequeue.cpp @@ -5,11 +5,16 @@ namespace itis { void LinkedDequeue::Enqueue(Element e) { - // TODO: напишите здесь свой код ... + SinglyNode *node = new SinglyNode(e, nullptr); + back_->next = node; + back_ = node; + size_++; } void LinkedDequeue::EnqueueFront(Element e) { - // TODO: напишите здесь свой код ... + SinglyNode *node = new SinglyNode(e, &front_); + front_ = node; + size_++; } void LinkedDequeue::Dequeue() { @@ -17,7 +22,10 @@ void LinkedDequeue::Dequeue() { throw std::logic_error("cannot not dequeue from empty queue"); } - // TODO: напишите здесь свой код ... + auto curr = front_->next; + front_->next = nullptr; + front_ = curr; + size_--; } void LinkedDequeue::DequeueBack() { @@ -25,11 +33,21 @@ void LinkedDequeue::DequeueBack() { throw std::logic_error("cannot not dequeue from empty queue"); } - // TODO: напишите здесь свой код ... + auto node = queue.front_; + for(auto curr = queue.front_; curr != back_; curr = curr->next){ + node = curr; + } + curr->next = nullptr; + back_ = node; + size_--; } void LinkedDequeue::Clear() { - // TODO: напишите здесь свой код ... + auto curr1 = queue.front_; + for(auto curr2 = queue.front_->next; curr2 != nullptr; curr2 = curr2->next){ + urr1->next = nullptr; + curr1->curr2; + } } // === РЕАЛИЗОВАНО === diff --git a/src/linked_queue.cpp b/src/linked_queue.cpp index 4296bf9..33ef7eb 100644 --- a/src/linked_queue.cpp +++ b/src/linked_queue.cpp @@ -5,7 +5,10 @@ namespace itis { void LinkedQueue::Enqueue(Element e) { - // TODO: напишите здесь свой код ... + SinglyNode *node = new SinglyNode(e, nullptr); + back_->next = node; + back_ = node; + size_++; } void LinkedQueue::Dequeue() { @@ -13,11 +16,18 @@ void LinkedQueue::Dequeue() { throw std::logic_error("could not dequeue from empty queue"); } - // TODO: напишите здесь свой код ... + auto curr = front_->next; + front_->next = nullptr; + front_ = curr; + size_--; } void LinkedQueue::Clear() { - // TODO: напишите здесь свой код ... + auto curr1 = queue.front_; + for(auto curr2 = queue.front_->next; curr2 != nullptr; curr2 = curr2->next){ + curr1->next = nullptr; + curr1->curr2; + } } // === РЕАЛИЗОВАНО === diff --git a/src/linked_stack.cpp b/src/linked_stack.cpp index d4927a8..32e4b4a 100644 --- a/src/linked_stack.cpp +++ b/src/linked_stack.cpp @@ -5,7 +5,9 @@ namespace itis { void LinkedStack::Push(Element e) { - // TODO: напишите здесь свой код ... + SinglyNode *node = new SinglyNode(e, &top_); + top_ = node; + size_++; } void LinkedStack::Pop() { @@ -13,11 +15,18 @@ void LinkedStack::Pop() { throw std::logic_error("cannot pop out from empty stack"); } - // TODO: напишите здесь свой код ... + auto curr = top_->next; + top_->next = nullptr; + top_ = curr; + size_--; } void LinkedStack::Clear() { - // TODO: напишите здесь свой код ... + auto curr1 = stack.top_; + for(auto curr2 = stack.top_->next; curr2 != nullptr; curr2 = curr2->next){ + curr1->next = nullptr; + curr1->curr2; + } } // === РЕАЛИЗОВАНО ===