//CIS:610-251 Data Structures and Algos //Assignment # 2 Question # 4 //Stack Operations #include #define STACKSIZE 256 class Stack { private: int * data; //data value in stack int spMax; //Max Stack Pointer Value; public: Stack() ; Stack(Stack& s); Stack(unsigned size); void pushandtest(int); int popandtest() ; void push(int); int pop(); int getTopNth(unsigned); int getBottomNth(unsigned); int StackTop(); bool Empty(void); }; //Constructor Stack::Stack() { data=new int(STACKSIZE); //init data as an array of 256 integer spMax=STACKSIZE-1; data[0]=0; //init stack index } //Constructor if size of Stack is given Stack::Stack(unsigned size) { spMax=size; data=new int(size+1); data[0]=0; //init index } //Copy Constructor Stack::Stack(Stack& s) { int i=1; this->spMax=s.spMax; this->data=new int[this->spMax+1]; this->data[0]=s.data[0]; for(;i<=data[0];i++) this->data[i]=s.data[i]; } //Add an element to Stack and increment the SP. void Stack::pushandtest(int item) { if (data[0]0) return data[data[0]--]; else return NULL; } //return how many elements in Stack. int Stack::StackTop() { return data[data[0]]; } //if Stack Empty return True bool Stack::Empty() { if (data[0]) return false;else return true; } main() { Stack main; main.push(2); main.push(9); main.push(7); main.pushandtest(3); main.pushandtest(50); main.pushandtest(44); main.pushandtest(13); cout << "\nIs Stack empty: " << main.Empty(); cout << "\nLast in Item: " << main.pop(); cout << "\nStack Top is: " << main.StackTop(); cout << "\nNext POPed is :" << main.popandtest() << '\n'; return 0; }