├── .gitattributes ├── .gitignore ├── Q1.cpp └── doubleStack.h /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | -------------------------------------------------------------------------------- /Q1.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include"doubleStack.h" 3 | using namespace std; 4 | int menu() { 5 | int operation = -1; 6 | while (operation <= -1|| operation >= 10) { 7 | cout < "; 30 | cin >> operation; 31 | } 32 | return operation; 33 | } 34 | 35 | 36 | 37 | int main() { 38 | int size1 = 0; // store stack 1 size; 39 | int size2 = 0;// store stack 2 size; 40 | while (size1 <= 0) { 41 | cout << "Please Enter stack1 size greater then zero : "; 42 | cin >> size1; 43 | } 44 | while (size2 <= 0) { 45 | cout << "\nPleaase enter stack2 size greater then zero : "; 46 | cin >> size2; 47 | } 48 | doubleStack stack(size1,size2); 49 | int operation = -1; 50 | while(operation) { 51 | operation = menu(); 52 | if (operation == 1) { // push data in stack 1 53 | int element; 54 | cout << "\nEnter data : "; 55 | cin >> element; 56 | stack.push1(element); 57 | } 58 | else if (operation == 2) { //push data in stack 2 59 | int element; 60 | cout << "\nEnter data : "; 61 | cin >> element; 62 | stack.push2(element); 63 | } 64 | else if (operation == 3) { // pop from stack 1 65 | stack.pop1(); 66 | } 67 | else if (operation == 4) {// pop from stack 2 68 | stack.pop2(); 69 | } 70 | else if (operation == 5) { //print top of stack 1 71 | cout << "\nTop of stack1 = " << stack.top1(); 72 | } 73 | else if (operation == 6) {//print top of stack 2 74 | cout << "\nTop of stack2 = " << stack.top2(); 75 | } 76 | else if (operation == 7) {//print all stack 1 77 | int number = 0; // store number befor printing; 78 | while (number != -9999999) { 79 | number = stack.top1(); 80 | if (number != 9999999) { 81 | cout << "Stack1 data : "< 3 | using namespace std; 4 | 5 | //In my doubly stack both stacks(stack1,stack2) size can vary 6 | template 7 | class doubleStack { 8 | private: 9 | T *data; 10 | int Top1; 11 | int Top2; 12 | int size1; 13 | int size2; 14 | public: 15 | doubleStack() { 16 | data = NULL; 17 | Top1 = 0; 18 | Top2 = 0; 19 | size1 = 0; 20 | size2 = 0; 21 | } 22 | doubleStack(int size1, int size2) { 23 | this->size1 = size1; 24 | this->size2 = size2; 25 | int sumSize = size1 + size2; 26 | data = new T[sumSize]; 27 | Top1 = 0; 28 | Top2 = this->size1; 29 | } 30 | T top1() { 31 | if (Top1-1 < 0) { 32 | return -9999999; 33 | } 34 | else { 35 | return data[Top1-1]; 36 | } 37 | } 38 | T top2() { 39 | if (Top2-1 < size1) { 40 | return -9999999; 41 | } 42 | else { 43 | return data[Top2-1]; 44 | } 45 | } 46 | void push1(T element) { 47 | if (Top1 < size1) { 48 | data[Top1] = element; 49 | if (Top1 <= size1 - 1) { 50 | Top1++; 51 | } 52 | } 53 | else { 54 | cout << "\nStack1 Full :("; 55 | } 56 | } 57 | void push2(T element) { 58 | if (Top2 < size1+ size2) { 59 | data[Top2] = element; 60 | if (Top2 <= (size1 + size2) - 1) { 61 | Top2++; 62 | } 63 | } 64 | else { 65 | cout << "\nStack2 Full :("; 66 | } 67 | } 68 | void pop1() { 69 | if (Top1 >= 0) { 70 | Top1--; 71 | } 72 | } 73 | void pop2() { 74 | if (Top2 >= size1) { 75 | Top2--; 76 | } 77 | } 78 | }; 79 | --------------------------------------------------------------------------------