You are on page 1of 15

LAB -4

1. Develop a menu driven program to implement the

basic operations in a stack.

*****MENU******

1.Push

2.Pop

3.Peek

4.Display

PROGRAM:

**************************************************
*****************************/
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int stack_arr[MAX];
int top = -1;
void push(int item);
int pop();
int peek();
int isEmpty();
int isFull();
void display();
int main()
{
int choice,item;
while(1)
{
printf("\n1.Push\n");
printf("2.Pop\n");
printf("3.Display the top
element\n");
printf("4.Display all stack
elements\n");
printf("5.Quit\n");
printf("\nEnter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1 :
printf("\nEnter the item to be
pushed : ");
scanf("%d",&item);
push(item);
break;
case 2:
item = pop();
printf("\nPopped item is :
%d\n",item );
break;
case 3:
printf("\nItem at the top is :
%d\n", peek() );
break;
case 4:
display();
break;
case 5:
exit(1);
default:
printf("\nWrong choice\n");
}/*End of switch*/
}/*End of while*/
return 0;
}/*End of main()*/
void push(int item)
{
if( isFull() )
{
printf("\nStack Overflow\n");
return;
}
top = top+1;
stack_arr[top] = item;
}/*End of push()*/
int pop()
{
int item;
if( isEmpty() )
{
printf("\nStack Underflow\n");
exit(1);
}
item = stack_arr[top];
top = top-1;
return item;
}/*End of pop()*/
int peek()
{
if( isEmpty() )
{
printf("\nStack Underflow\n");
exit(1);
}
return stack_arr[top];
}/*End of peek()*/
int isEmpty()
{
if( top == -1 )
return 1;
else
return 0;
}/*End of isEmpty*/
int isFull()
{
if( top == MAX-1 )
return 1;
else
return 0;
}/*End of isFull*/
void display()
{
int i;
if( isEmpty() )
{
printf("\nStack is empty\n");
return;
}
printf("\nStack elements :\n\n");
for(i=top;i>=0;i--)
printf(" %d\n", stack_arr[i] );
printf("\n");
}/*End of display()*/
OUTPUT:
2. Create a data structure twoStacks that represents

two stacks. Implementation of twoStacks should use

only one array, i.e., both stacks should use the same

array for storing elements. Following functions must

be supported by twoStacks.

push1(int x) –> pushes x to first stack

push2(int x) –> pushes x to second stack

pop1() –> pops an element from first stack and

return the popped element

pop2() –> pops an element from second stack and

return the popped element

Display1()-> Display stack1 elements

Display2()-> Display stack2 elements


Implementation of twoStack should be space
efficient

PROGRAM:

#include <iostream>
#include <stdlib.h>

using namespace std;

class twoStacks {
int* arr;
int size;
int top1, top2;

public:
// Constructor
twoStacks(int n)
{
size = n;
arr = new int[n];
top1 = n / 2 + 1;
top2 = n / 2;
}
// Method to push an element x to stack1
void push1(int x)
{
// There is at least one empty
// space for new element
if (top1 > 0) {
top1--;
arr[top1] = x;
}
else {
cout << "Stack Overflow"
<< " By element :" << x << endl;
return;
}
}

// Method to push an element


// x to stack2
void push2(int x)
{

// There is at least one empty


// space for new element
if (top2 < size - 1) {
top2++;
arr[top2] = x;
}
else {
cout << "Stack Overflow"
<< " By element :" << x << endl;
return;
}
}

// Method to pop an element from first stack


int pop1()
{
if (top1 <= size / 2) {
int x = arr[top1];
top1++;
return x;
}
else {
cout << "Stack UnderFlow";
exit(1);
}
}
// Method to pop an element
// from second stack
int pop2()
{
if (top2 >= size / 2 + 1) {
int x = arr[top2];
top2--;
return x;
}
else {
cout << "Stack UnderFlow";
exit(1);
}
}
};

You might also like