Skip to content

Commit

Permalink
add template to stack
Browse files Browse the repository at this point in the history
  • Loading branch information
VladTkach committed Jun 28, 2022
1 parent 41d72ba commit 94727ea
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 103 deletions.
12 changes: 6 additions & 6 deletions ShuntingYard.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#include "ShuntingYard.h"

stack ShuntingYard::getNotation(string &line) {
stack queue;
stack array;
stack<string> ShuntingYard::getNotation(string &line) {
stack<string> queue;
stack<string> array;
string current;
for (int i = 0; i < line.length(); ++i) {
ifUnary(i, line);
Expand All @@ -22,7 +22,7 @@ stack ShuntingYard::getNotation(string &line) {
return queue;
}

void ShuntingYard::pushOperation(stack &array, stack &queue, string &current) {
void ShuntingYard::pushOperation(stack<string> &array, stack<string> &queue, string &current) {
if (!array.isEmpty()) {
string temp = array.getElement();
if (getPrecedence(current) <= getPrecedence(temp) && !getAssociativity(current) ||
Expand All @@ -35,15 +35,15 @@ void ShuntingYard::pushOperation(stack &array, stack &queue, string &current) {
}


void ShuntingYard::takeCashBack(stack &array, stack &queue) {
void ShuntingYard::takeCashBack(stack<string> &array, stack<string> &queue) {
while (!array.isEmpty()) {
string current = array.getElement();
queue.addElement(current);
array.deleteElement();
}
}

void ShuntingYard::pushScope(stack &array, stack &queue) {
void ShuntingYard::pushScope(stack<string> &array, stack<string> &queue) {
while (!array.isEmpty()) {
string current = array.getElement();
if (current == "(") {
Expand Down
8 changes: 4 additions & 4 deletions ShuntingYard.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
using namespace std;

class ShuntingYard {
static void pushScope(stack &array, stack &queue);
static void pushScope(stack<string> &array, stack<string> &queue);

static void pushOperation(stack &array, stack &queue, string &current);
static void pushOperation(stack<string> &array, stack<string> &queue, string &current);

static void takeCashBack(stack &array, stack &queue);
static void takeCashBack(stack<string> &array, stack<string> &queue);

static string getNumber(int &start, string &line);

static void ifUnary(int index, string &line);

public:
static stack getNotation(string &line);
static stack<string> getNotation(string &line);

};
4 changes: 2 additions & 2 deletions calc.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "calc.h"

double calc(stack &queue, string &sign) {
double calc(stack<string> &queue, string &sign) {
queue.deleteElement();
double a, b;

Expand All @@ -12,7 +12,7 @@ double calc(stack &queue, string &sign) {
return operation(a, b, sign);
}

double getValue(stack &queue, string &sign) {
double getValue(stack<string> &queue, string &sign) {
if (!queue.isEmpty()) {
string current = queue.getElement();
if (isNumber(current)) {
Expand Down
4 changes: 2 additions & 2 deletions calc.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ using namespace std;

double operation(double a, double b, string &operation);

double calc(stack &queue, string &sign);
double calc(stack<string> &queue, string &sign);

double getValue(stack &queue, string &sign);
double getValue(stack<string> &queue, string &sign);

double toDouble(string &item);

Expand Down
25 changes: 13 additions & 12 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@

int main(int size, char *arg[]) {
string line;
for (int i = 1; i < size; ++i) {
line += arg[i];
}
if (!line.empty()) {
stack notation = ShuntingYard::getNotation(line);
if (notation.getSize() == 1){
cout << "Result: " << notation.getElement();
}
else{
string sign = notation.getElement();
cout << "Result: " << calc(notation, sign);
}
// for (int i = 1; i < size; ++i) {
// line += arg[i];
// }
// if (!line.empty()) {
getline(cin, line);
stack<string> notation = ShuntingYard::getNotation(line);
if (notation.getSize() == 1) {
cout << "Result: " << notation.getElement();
} else {
notation.show();
string sign = notation.getElement();
cout << "Result: " << calc(notation, sign);
}
// }
return 0;
}
66 changes: 0 additions & 66 deletions stack.cpp
Original file line number Diff line number Diff line change
@@ -1,67 +1 @@
#include "stack.h"

stack::stack() {
size = 0;
maxSize = 1;
array = new string[maxSize];
}

stack::~stack() {
delete[] array;
}

void stack::addElement(string &elem) {
if (size + 1 > maxSize){
resize();
}
array[size] = elem;
size++;
}

string stack::getElement() {
return array[size - 1];
}

void stack::deleteElement() {
if (!isEmpty()){
size--;
}
}

bool stack::isEmpty() {
if (size == 0){
return true;
}
return false;
}

int stack::getSize() const {
return size;
}

void stack::show() {
for (int i = 0; i < size; ++i) {
cout << array[i] << " ";
}
cout << endl;
}

void stack::reverse() {
auto *new_array = new string[maxSize];
for (int i = 0; i < size; ++i) {
new_array[i] = array[size - 1 - i];
}
delete[] array;
array = new_array;
}

void stack::resize() {
maxSize *= 2;
string *new_array = new string[maxSize];
for (int i = 0; i < size; ++i) {
new_array[i] = array[i];
}
delete[] array;
array = new_array;

}
57 changes: 46 additions & 11 deletions stack.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,66 @@

using namespace std;

template<typename T>
class stack {
int size;
string *array;
T *array;
int maxSize;

public:
stack();
stack() {
size = 0;
maxSize = 1;
array = new T[maxSize];
};

~stack();
~stack() {
delete[] array;
};

void addElement(string&);
void addElement(T& elem) {
if (size + 1 > maxSize) {
resize();
}
array[size] = elem;
size++;
};

string getElement();
T getElement() {
return array[size - 1];
};

void deleteElement();
void deleteElement() {
if (!isEmpty()) {
size--;
}
};

void show();
void show(){
for (int i = 0; i < size; ++i) {
cout << array[i] << " ";
}
cout << endl;
};

bool isEmpty();
bool isEmpty(){
return (size == 0);
};

int getSize() const;
int getSize() const{
return size;
};

void reverse();
void resize(){
maxSize *= 2;
T *new_array = new T[maxSize];
for (int i = 0; i < size; ++i) {
new_array[i] = array[i];
}
delete[] array;
array = new_array;

void resize();
};


};

0 comments on commit 94727ea

Please sign in to comment.