Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions src/array_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,43 @@ 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() {
if (size_ == 0) {
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;
}

// === РЕАЛИЗОВАНО ===
Expand Down
28 changes: 23 additions & 5 deletions src/linked_dequeue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,49 @@
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() {
if (size_ == 0) {
throw std::logic_error("cannot not dequeue from empty queue");
}

// TODO: напишите здесь свой код ...
auto curr = front_->next;
front_->next = nullptr;
front_ = curr;
size_--;
}

void LinkedDequeue::DequeueBack() {
if (size_ == 0) {
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;
}
}

// === РЕАЛИЗОВАНО ===
Expand Down
16 changes: 13 additions & 3 deletions src/linked_queue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,29 @@
namespace itis {

void LinkedQueue::Enqueue(Element e) {
// TODO: напишите здесь свой код ...
SinglyNode *node = new SinglyNode(e, nullptr);
back_->next = node;
back_ = node;
size_++;
}

void LinkedQueue::Dequeue() {
if (size_ == 0) {
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;
}
}

// === РЕАЛИЗОВАНО ===
Expand Down
15 changes: 12 additions & 3 deletions src/linked_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,28 @@
namespace itis {

void LinkedStack::Push(Element e) {
// TODO: напишите здесь свой код ...
SinglyNode *node = new SinglyNode(e, &top_);
top_ = node;
size_++;
}

void LinkedStack::Pop() {
if (top_ == nullptr) {
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;
}
}

// === РЕАЛИЗОВАНО ===
Expand Down