Data Structure: Stack implementation in C++
The more detailed explanations can be found here.
(A) Top of stack varying method
Algorithm for top of stack varying method
1. Declare and initialize necessary variables, eg top = -1, MAXSIZE etc.
2. For push operation,
If top = MAXSIZE – 1
print ” stack overflow”
else
top = top + 1;
Read item from user
stack[top] = item
3. For next push operation, goto step 2.
4. For pop operation,
If top = -1
print “Stack underflow”
Else
item = stack[top]
top = top – 1
Display item
5. For next pop operation, goto step 4.
6. stop
2. For push operation,
If top = MAXSIZE – 1
print ” stack overflow”
else
top = top + 1;
Read item from user
stack[top] = item
3. For next push operation, goto step 2.
4. For pop operation,
If top = -1
print “Stack underflow”
Else
item = stack[top]
top = top – 1
Display item
5. For next pop operation, goto step 4.
6. stop
Source code for top of stack varying method
#include<iostream>
#include<cstdlib>
#define MAX_SIZE 10
using namespace std;
class Stack{
private:
int item[MAX_SIZE];
int top;
public:
Stack(){
top = -1;
}
void push(int data){
item[++top] = data;
}
int pop(){
return item[top--];
}
int size(){
return top+1;
}
bool is_empty(){
if(top==-1)
return true;
else
return false;
}
bool is_full(){
if(top==MAX_SIZE-1)
return true;
else
return false;
}
void display(){
for(int i=0; i<this->size(); i++){
cout<<item[i]<<" ";
}
cout<<endl;
}
};
int main(){
int choice;
int temp;
Stack stack;
while(true){
cout<<"Choose any one of the following"<<endl;
cout<<"1. Push Item. "<<endl;
cout<<"2. Pop Item."<<endl;
cout<<"3. Size of Stack."<<endl;
cout<<"4. Display all elements of stack."<<endl;
cout<<"5. Exit."<<endl;
cout<<"Your Choice: ";
cin>>choice;
switch(choice){
case 1:
if(!stack.is_full()){
cout<<"Enter number to push: ";
cin>>temp;
stack.push(temp);
}else{
cout<<"Can't push. Stack is Full!!"<<endl;
}
break;
case 2:
if(!stack.is_empty()){
cout<<"The number popped is: "<<stack.pop()<<endl;
}else{
cout<<"Cant't pop. Stack is Empty!!"<<endl;
}
break;
case 3:
cout<<"The size of the stack is: "<<stack.size()<<endl;
break;
case 4:
if(!stack.is_empty()){
cout<<"The elements in stack are: ";
stack.display();
cout<<endl;
}else{
cout<<"Stack is Empty"<<endl;
}
break;
case 5:
exit(0);
break;
}
}
return 0;
}
(B) Top Fixed method ( Base varying method)
Algorithm for top fixed method
1. Declare and initialize necessary variables e.g. BOS = 0, MAXSIZE etc.
2. For push operation,
If BOS = MAXSIZE
print “stack overflow”
Else
Insert new element by making vacant space at stack[0] location
/* for(i = BOS; i > 0; i–){
stack[i] = stack[i-1];
}
stack[0] = BOS
++BOS
*/
3. For next push operation goto step 2.
4. For pop operation
If BOS = 0
print”stack underflow”
else
extract item from stack[0]. Decrement BOS and refil empty space by lowering each step by 1.
5. For next pop operation, goto step 4.
6. Stop
2. For push operation,
If BOS = MAXSIZE
print “stack overflow”
Else
Insert new element by making vacant space at stack[0] location
/* for(i = BOS; i > 0; i–){
stack[i] = stack[i-1];
}
stack[0] = BOS
++BOS
*/
3. For next push operation goto step 2.
4. For pop operation
If BOS = 0
print”stack underflow”
else
extract item from stack[0]. Decrement BOS and refil empty space by lowering each step by 1.
5. For next pop operation, goto step 4.
6. Stop
Source code for top fixed method
#include<iostream>
#include<cstdlib>
#define MAX_SIZE 10
using namespace std;
class Stack{
private:
int item[MAX_SIZE];
int BOS;
public:
Stack(){
BOS = 0;
}
void push(int data){
for(int i=BOS; i>0; i--){
item[i] = item[i-1];
}
item[0] = data;
++BOS;
}
int pop(){
int temp = item[0];
for(int i = 0; i<BOS; i++){
item[i] = item[i+1];
}
BOS--;
return temp;
}
void display(){
for(int i = 0; i<BOS; i++){
cout<<item[i]<<" ";
}
cout<<endl;
}
bool isEmpty(){
if(BOS == 0){
return true;
}else{
return false;
}
}
bool isFull(){
if(BOS == MAX_SIZE){
return true;
}else{
return false;
}
}
};
int main(){
int choice, data;
Stack stack;
while(true){
cout<<"1. Push a Data"<<endl;
cout<<"2. Pop a Data"<<endl;
cout<<"3. Display All Element of Stack"<<endl;
cout<<"4. Quit"<<endl;
cout<<"Enter your choice: ";
cin>>choice;
switch(choice){
case 1:
if(!stack.isFull()){
cout<<"Enter the data to push: ";
cin>>data;
stack.push(data);
cout<<endl;
}else{
cout<<"STACK IS FULL!!"<<endl;
}
break;
case 2:
if(!stack.isEmpty()){
cout<<"The data popped is "<<stack.pop()<<endl;
}else{
cout<<"THE STACK IS EMPTY"<<endl;
}
break;
case 3:
if(!stack.isEmpty()){
stack.display();
}else{
cout<<"STACK IS EMPTY"<<endl;
}
break;
case 4:
exit(0);
break;
}
}
return 0;
}

good job
Implementation in C++
Algorithm for PUSH Operation:
Step 1: If TOP >= SIZE – 1 then
Write “Stack is Overflow”
Step 2: TOP = TOP + 1
Step 3: STACK [TOP] = X
Algorithm for POP Operation:
Step 1: If TOP = -1 then
Write “Stack is Underflow”
Step 2: Return STACK [TOP]
Step 3: TOP = TOP – 1
If any error in this code segment
If(top<size) then
Top=top+1
Stack[top]=can
Else
Print "stack over flow"
End of if