From 44d4e2265cc4d9539a6c976c9cc94267310adf56 Mon Sep 17 00:00:00 2001 From: Shaun Reed Date: Mon, 23 Mar 2020 12:42:02 +0000 Subject: [PATCH] Add StackArray class --- plates/cpp-datastruct/apps/driver.cpp | 69 +++++++++++++++++-- .../cpp-datastruct/include/lib-datastruct.h | 42 +++++------ plates/cpp-datastruct/src/lib-datastruct.cpp | 52 ++++++++++++++ 3 files changed, 131 insertions(+), 32 deletions(-) diff --git a/plates/cpp-datastruct/apps/driver.cpp b/plates/cpp-datastruct/apps/driver.cpp index a4607d5..73e6592 100644 --- a/plates/cpp-datastruct/apps/driver.cpp +++ b/plates/cpp-datastruct/apps/driver.cpp @@ -1,20 +1,23 @@ #include #include -enum OPS { - EXIT, LISTS, STACKS, QUEUES -}; +// StackArray menu +void Stack(); +// Main menu int main () { // std::cout << "Running driver program version " << DS_VERSION; + enum OPS { + EXIT, LISTS, STACKS, QUEUES + }; bool exit = false; - LinkedList t; int choice; while (!exit) { - std::cout << "Enter a choice below...\n\t0. Exit" - << "\n\t1. LISTS\n\t2. STACKS\n\t3. QUEUES\n"; + std::cout << "\n##### Main Menu #####\n" + << "Enter a choice below...\n\t0. Exit" + << "\n\t1. Lists\n\t2. Stacks\n\t3. Queues\n"; std::cin >> choice; std::cin.clear(); @@ -27,6 +30,7 @@ int main () break; case STACKS: // 2 + Stack(); break; case QUEUES: // 3 @@ -40,3 +44,56 @@ int main () return 0; } + +// StackArray menu +void Stack() +{ + enum STACK_OPS { + EXIT, PUSH, POP, TOP, DISPLAY + }; + + StackArray stack; + bool exit = false; + int choice; + while (!exit) { + std::cout << "\n##### StackArray Menu #####\n" + << "Enter a choice below...\n\t0. Exit" + << "\n\t1. Push\n\t2. Pop\n\t3. Top\n\t4. Display\n"; + std::cin >> choice; + std::cin.clear(); + + switch (choice) { + case EXIT: // 0 + exit = true; + break; + + case PUSH: // 1 + char val; + std::cout << "Enter a character to push to our stack: "; + std::cin >> val; + std::cin.clear(); + stack.Push(val); + break; + + + case POP: // 2 + std::cout << "[" << stack.Pop() << "] has been removed from our stack\n"; + break; + + + case TOP: // 3 + std::cout << "[" << stack.Top() << "] is at the top of our stack\n"; + break; + + + case DISPLAY: // 4 + stack.Display(); + break; + + default: + std::cout << "Invalid option selected\n"; + break; + } + } + +} diff --git a/plates/cpp-datastruct/include/lib-datastruct.h b/plates/cpp-datastruct/include/lib-datastruct.h index ff08393..2090fee 100644 --- a/plates/cpp-datastruct/include/lib-datastruct.h +++ b/plates/cpp-datastruct/include/lib-datastruct.h @@ -3,36 +3,26 @@ #include -enum CONST { - MAX=10 -}; - -template -class ListNode { +class StackArray { public: - ListNode() : next(NULL) {}; - ListNode(T val) : data(val), next(NULL) {}; - // Sneak more of Push() through node concstr? - // ListNode(T val, LinkedList& l) data(val), next(l.Top()); - private: - T data; - ListNode* next; - -}; - -template -class LinkedList { - - public: - LinkedList() {}; - void Push(T val) {}; - T Pop(); - T Top(); + StackArray() : top(EMPTY) {}; + void Push(char val); + char Pop(); + char Top() const; void Display() const; + bool isEmpty() const; private: - // ListNode data[MAX]; - + enum { EMPTY=-1, MAX=10 }; + class ListNode { + public: + ListNode() : next(NULL) {}; + ListNode(char val) : data(val), next(NULL) {}; + char data; + ListNode* next; + }; + ListNode list[MAX]; + int top; }; #endif diff --git a/plates/cpp-datastruct/src/lib-datastruct.cpp b/plates/cpp-datastruct/src/lib-datastruct.cpp index 85f3ab6..3f32229 100644 --- a/plates/cpp-datastruct/src/lib-datastruct.cpp +++ b/plates/cpp-datastruct/src/lib-datastruct.cpp @@ -1,3 +1,55 @@ #include +void StackArray::Push(char val) +{ + + if (top < MAX && !isEmpty()) { + this->list[++top].data = val; + } + else if (isEmpty()) { + this->list[++top].data = val; + } + else { + std::cout << "Error: List is full!\n"; + } + return; +} + +char StackArray::Pop() +{ + + if (!isEmpty()) { + char temp = this->Top(); + this->top -= 1; + return temp; + } + return '\0'; +} + +char StackArray::Top() const +{ + return this->list[top].data; +} + +void StackArray::Display() const +{ + if (isEmpty()) { + std::cout << "Error: Stack is empty\n"; + return; + } + + int tempTop = this->top; + while (tempTop >= 0) { + std::cout << "Value at list [" << tempTop << "]: " + << this->list[tempTop].data << std::endl; + tempTop--; + } + + return; +} + +bool StackArray::isEmpty() const +{ + return this->top <= EMPTY; +}