#include "StdAfx.h"
#include "Stos.h"
#include "string"
Stos::Stos(void)
{
last = 0;
size = 20;
Numbers = 0;
tab = new int[size];
if(tab == NULL)
{
throw "Error";
}
}
Stos::Stos(long lSize)
{
last = 0;
size = lSize;
Numbers = 0;
tab = new int[size];
if(tab == NULL)
{
throw "Error";
}
}
void Stos::Push(int elem)
{
if(last < size)
{
tab[last ++] = elem;
Numbers ++;
}
else
{
GrowStack();
}
}
int Stos::Pop()
{
if(last >= 0)
{
Numbers --;
return tab[--last];
}
}
unsigned Stos::Stack0()
{
if(last >= 0)
{
return 1;
}
else return 0;
}
const int& Stos::Top()
{
return tab[last - 1];
}
void Stos::GrowStack()
{
int *newTab = new int[size + 10];
for(int i=0; i < size; i++)
newTab[i] = tab[i];
delete []tab;
tab = newTab;
size += 10;
}
long Stos::GetNumbers()
{
return Numbers;
}
Stos::~Stos(void)
{
delete []tab;
}
I2luY2x1ZGUgIlN0ZEFmeC5oIgojaW5jbHVkZSAiU3Rvcy5oIgojaW5jbHVkZSAic3RyaW5nIgpTdG9zOjpTdG9zKHZvaWQpCnsKCQkJCQkJCQkKCWxhc3QgPSAwOwkJCQkJCiAgICBzaXplID0gMjA7CQkJCQkKCU51bWJlcnMgPSAwOwogCiAgICB0YWIgPSBuZXcgaW50W3NpemVdOwkJCiAKICAgIGlmKHRhYiA9PSBOVUxMKSAgICAgICAgICAgICAKICAgIHsKICAgICAgICAgdGhyb3cgIkVycm9yIjsgICAgIAogICAgfQoKCQp9CgpTdG9zOjpTdG9zKGxvbmcgbFNpemUpCnsKCQkJCQkJCQkKCWxhc3QgPSAwOwkJCQkJCiAgICBzaXplID0gbFNpemU7CQkJCQoJTnVtYmVycyA9IDA7CiAKICAgIHRhYiA9IG5ldyBpbnRbc2l6ZV07CQkKIAogICAgaWYodGFiID09IE5VTEwpICAgICAgICAgICAgIAogICAgewoJCXRocm93ICJFcnJvciI7ICAgICAKICAgIH0KfQoKdm9pZCBTdG9zOjpQdXNoKGludCBlbGVtKQp7CglpZihsYXN0IDwgc2l6ZSkJCQkJCgl7CgkJdGFiW2xhc3QgKytdID0gZWxlbTsJCQoJCU51bWJlcnMgKys7Cgl9IAoJZWxzZQoJewoJCUdyb3dTdGFjaygpOwkJCQoJfQp9CgppbnQgU3Rvczo6UG9wKCkKewoJaWYobGFzdCA+PSAwKQkJCQkJCQoJewoJCU51bWJlcnMgLS07CgkJcmV0dXJuIHRhYlstLWxhc3RdOwkJCQkKCX0gCn0KCgp1bnNpZ25lZCBTdG9zOjpTdGFjazAoKQp7CglpZihsYXN0ID49IDApCQkJCQkJCgl7CgkJCgkJcmV0dXJuIDE7CQkJCQoJfSAKCWVsc2UgIHJldHVybiAwOwp9Cgpjb25zdCBpbnQmIFN0b3M6OlRvcCgpCnsKCXJldHVybiB0YWJbbGFzdCAtIDFdOwkJCQp9Cgp2b2lkIFN0b3M6Okdyb3dTdGFjaygpIAp7CglpbnQgKm5ld1RhYiA9IG5ldyBpbnRbc2l6ZSArIDEwXTsJCQkJCQogCiAgICBmb3IoaW50IGk9MDsgaSA8IHNpemU7IGkrKykKCQluZXdUYWJbaV0gPSB0YWJbaV07CQkJCQkJCQkKCQlkZWxldGUgW110YWI7CQkJCQkJCQkJCiAKICAgICAgICB0YWIgPSBuZXdUYWI7CQkJCQkJCQkJCiAKICAgICAgICBzaXplICs9IDEwOwkJCQkJCQkJCQkKfQoKbG9uZyBTdG9zOjpHZXROdW1iZXJzKCkKewoJcmV0dXJuIE51bWJlcnM7Cn0KClN0b3M6On5TdG9zKHZvaWQpCnsKCWRlbGV0ZSBbXXRhYjsJCQkJCn0K