School Commit Init

This commit is contained in:
2024-08-31 12:07:21 +03:00
commit 0b130ee18c
2801 changed files with 4720552 additions and 0 deletions
@@ -0,0 +1,73 @@
#include "SortedBagIterator.h"
#include "SortedBag.h"
#include <exception>
using namespace std;
SortedBagIterator::SortedBagIterator(const SortedBag& b) : bag(b) {
// Best case: O(1) Worst case: O(n) Average case: O(log n)
this->first();
}
TComp SortedBagIterator::getCurrent() {
//O(1)
if(this->valid())
return this->current->elem;
else
throw exception();
}
bool SortedBagIterator::valid() {
//O(1)
if(this->current == nullptr)
return false;
return true;
}
void SortedBagIterator::next() {
// Best case: O(1) Worst case: O(n) Average case: O(log n)
if(this->valid())
{
if(this->currentCount > 1)
this->currentCount--;
else
{
if(this->current->right != nullptr)
{
this->current = this->current->right;
while(this->current->left != nullptr)
this->current = this->current->left;
this->currentCount = this->current->count;
}
else
{
BSTNode* currentParent = this->current->parent;
while(currentParent != nullptr && currentParent->right == this->current)
{
this->current = currentParent;
currentParent = currentParent->parent;
}
this->current = currentParent;
if(this->current != nullptr)
this->currentCount = this->current->count;
else
this->currentCount = 0;
}
}
}
else
throw exception();
}
void SortedBagIterator::first() {
// Best case: O(1) Worst case: O(n) Average case: O(log n)
this->current = this->bag.root;
if(this->current != nullptr){
while(this->current->left != nullptr)
this->current = this->current->left;
this->currentCount = this->current->count;
}
else{
this->currentCount = 0;
}
}