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
36 changes: 26 additions & 10 deletions src/array_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,57 @@
#include <algorithm> // copy, fill
#include <cassert> // assert
#include <stdexcept> // logic_error, invalid_argument

using namespace std;
namespace itis {

ArrayStack::ArrayStack(int capacity) {
if (capacity <= 0) {
throw std::invalid_argument("initial capacity must be greater than zero");
}

// TODO: напишите здесь свой код ...
capacity_ = capacity;
size_ = 0;
data_ = new Element[capacity]{};
}

ArrayStack::~ArrayStack() {
// TODO: напишите здесь свой код ...
delete[] data_;
size_ = 0;
capacity_ = 0;
data_ = nullptr;
}

void ArrayStack::Push(Element e) {
// TODO: напишите здесь свой код ...
if (size_ == capacity_){
resize(capacity_ + kCapacityGrowthCoefficient);
}
data_[size_] = e;
size_ += 1;
}

void ArrayStack::Pop() {
if (size_ == 0) {
throw std::logic_error("cannot pop out from empty stack");
}
data_[size_ - 1] = Element::UNDEFINED;
size_ -= 1;
}

// TODO: напишите здесь свой код ...
}

void ArrayStack::Clear() {
// TODO: напишите здесь свой код ...
for (int i = 0; i < size_; i++)
{
data_[i] = Element::UNDEFINED;
}
size_ = 0;
}

void ArrayStack::resize(int new_capacity) {
assert(new_capacity > size_);

// TODO: напишите здесь свой код ...
auto *new_data_ = new Element[new_capacity]{};
copy(data_, data_ + size_, new_data_);
delete[] data_;
data_ = new_data_;
capacity_ = new_capacity;
}

// === РЕАЛИЗОВАНО ===
Expand Down
69 changes: 61 additions & 8 deletions src/linked_dequeue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,85 @@

namespace itis {

void LinkedDequeue::Enqueue(Element e) {
// TODO: напишите здесь свой код ...
void LinkedDequeue::Enqueue(Element e)
{
auto new_node = new DoublyNode(e, nullptr, back_);
if (size_ == 0){
front_ = new_node;
back_ = new_node;
}
else
{
back_->previous = new_node;
back_ = new_node;
}
size_ += 1;
}

void LinkedDequeue::EnqueueFront(Element e) {
// TODO: напишите здесь свой код ...
auto new_node = new DoublyNode(e, front_, nullptr);
if (size_ == 0){
front_ = new_node;
back_ = new_node;
}
else
{
front_->next = new_node;
front_ = new_node;
}
size_ += 1;
}

void LinkedDequeue::Dequeue() {
if (size_ == 0) {
throw std::logic_error("cannot not dequeue from empty queue");
}

// TODO: напишите здесь свой код ...
else if (size_ == 1)
{
delete front_;
back_ = nullptr;
front_ = nullptr;
} else
{
auto temp = front_->previous;
delete front_;
front_ = temp;
front_->next = nullptr;
}
size_ -=1;
}

void LinkedDequeue::DequeueBack() {
if (size_ == 0) {
throw std::logic_error("cannot not dequeue from empty queue");
}

// TODO: напишите здесь свой код ...
else if (size_ == 1)
{
delete front_;
back_ = nullptr;
front_ = nullptr;
}
else
{
auto temp = back_->next;
delete back_;
back_ = temp;
back_->previous = nullptr;
}
size_ -=1;
}

void LinkedDequeue::Clear() {
// TODO: напишите здесь свой код ...
auto curr = front_;
for (int i = 0; i < size_; i++)
{
auto temp = curr->previous;
delete curr;
curr = temp;
}
size_ = 0;
front_ = nullptr;
back_ = nullptr;
}

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

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


void LinkedQueue::Dequeue() {
if (size_ == 0) {
throw std::logic_error("could not dequeue from empty queue");
}

// TODO: напишите здесь свой код ...
else if (size_ == 1){
delete front_;
back_ = nullptr;
front_ = nullptr;
}
else
{
auto temp = front_->next;
delete front_;
front_ = temp;
}
size_ -= 1;
}

void LinkedQueue::Clear() {
// TODO: напишите здесь свой код ...
auto curr = front_;
for (int i = 0; i < size_; i++)
{
auto temp = curr->next;
delete curr;
curr = temp;
}
size_ = 0;
front_ = nullptr;
back_ = nullptr;
}

// === РЕАЛИЗОВАНО ===
Expand Down
23 changes: 18 additions & 5 deletions src/linked_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,33 @@

namespace itis {

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

void LinkedStack::Pop() {
if (top_ == nullptr) {
throw std::logic_error("cannot pop out from empty stack");
}

// TODO: напишите здесь свой код ...
SinglyNode *temp = top_->next;
delete top_;
top_ = temp;
size_ -= 1;
}

void LinkedStack::Clear() {
// TODO: напишите здесь свой код ...
auto curr = top_;
for (int i = 0; i < size_; i++)
{
auto temp = curr->next;
delete curr;
curr = temp;
}
top_ = nullptr;
size_ = 0;
}

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