0% found this document useful (0 votes)
53 views

Data Structure Assignment 02

1) Implements a stack data structure with push, pop, isEmpty, isFull methods. 2) Defines a queue data structure with enqueue, dequeue, peek, size, isEmpty, isFull methods. 3) Describes an algorithm to convert an infix expression to postfix using a stack. It takes an infix expression as input, uses a stack to evaluate precedence and output the postfix expression.

Uploaded by

TRUE LOVERS
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views

Data Structure Assignment 02

1) Implements a stack data structure with push, pop, isEmpty, isFull methods. 2) Defines a queue data structure with enqueue, dequeue, peek, size, isEmpty, isFull methods. 3) Describes an algorithm to convert an infix expression to postfix using a stack. It takes an infix expression as input, uses a stack to evaluate precedence and output the postfix expression.

Uploaded by

TRUE LOVERS
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 12

1) Write a code for Push and if(top==-1)

popped item from stack and return 1;


display the stack?
else
#include<iostream>
return 0;
#define SIZE 5
}
using namespace std;

class STACK
int STACK::isFull()
{
{
private:
if(top==(SIZE-1))
int num[SIZE];
return 1;
int top;
else
public:
return 0;
STACK();
}
int push(int);

int pop();
int STACK::push(int n)
int isEmpty();
{
int isFull();
if(isFull())
void displayItems();
{
};
return 0;
STACK::STACK()
}
{
++top;
top=-1;
num[top]=n;
}
return n;

}
int STACK::isEmpty()

{
int STACK::pop() {

{ cout<<endl;

int temp; cout<<"0 for Exit from stack code"<<endl;

if(isEmpty()) cout<<"1 for Push Item in stack"<<endl;

return 0; cout<<"2 for Popped Item from stack"<<endl;

temp=num[top]; cout<<"3 for Display Items in stack (Print


STACK)."<<endl;
--top;

return temp;
cout<<"Enter your choice: ";

cin>>choice;
}

switch(choice)
void STACK::displayItems()
{
{
case 0: break;
int i;

cout<<"STACK is: ";


case 1:
for(i=(top); i>=0; i--)
cout<<"Enter item to insert in stack" <<endl;
cout<<num[i]<<" ";
cin>>n;
cout<<endl;
temp=stk.push(n);
}
if(temp==0)

cout<<"Stack is full."<<endl;
int main()
else
{
cout<<temp<<" inserted."<<endl;
STACK stk;
break;
int choice, n,temp;

do
case 2:
temp=stk.pop(); default:

if(temp==0) cout<<"You entered Invalid choice."<<endl;

cout<<"Stack is empty."<<endl; }

else }

cout<<temp<<" is removed (popped)."<<endl; while(choice!=0);

break;

case 3: return 0;

stk.displayItems();

break; }

Output
2) Implementation of Queue void dequeue();

void enqueue(X x);

X peek();
#include <iostream>
int size();
#include <cstdlib>
bool isEmpty();
using namespace std;
bool isFull();

};
// define default capacity of the queue

#define SIZE 10
// Constructor to initialize queue

template <class X>


// Class for queue
queue<X>::queue(int size)
template <class X>
{
class queue
arr = new X[size];
{
capacity = size;
X *arr; // array to store queue
elements front = 0;

int capacity; // maximum capacity of rear = -1;


the queue
count = 0;
int front; // front points to front
element in the queue (if any) }

int rear; // rear points to last


element in the queue
// Utility function to remove front element
int count; // current size of the from the queue
queue
template <class X>

void queue<X>::dequeue()
public:
{
queue(int size = SIZE); //
// check for queue underflow
constructor
if (isEmpty())
{

cout << "UnderFlow\nProgram rear = (rear + 1) % capacity;


Terminated\n";
arr[rear] = item;
exit(EXIT_FAILURE);
count++;
}
}

cout << "Removing " << arr[front] <<


'\n'; // Utility function to return front element in
the queue

template <class X>


front = (front + 1) % capacity;
X queue<X>::peek()
count--;
{
}
if (isEmpty())

{
// Utility function to add an item to the
queue cout << "UnderFlow\nProgram
Terminated\n";
template <class X>
exit(EXIT_FAILURE);
void queue<X>::enqueue(X item)
}
{
return arr[front];
// check for queue overflow
}
if (isFull())

{
// Utility function to return the size of the
cout << "OverFlow\nProgram queue
Terminated\n";
template <class X>
exit(EXIT_FAILURE);
int queue<X>::size()
}
{

return count;
cout << "Inserting " << item << '\n';
}
q.enqueue("c");

// Utility function to check if the queue is


empty or not
cout << "Front element is: " << q.peek()
template <class X> << endl;

bool queue<X>::isEmpty() q.dequeue();

return (size() == 0); q.enqueue("d");

cout << "Queue size is " << q.size() <<


endl;
// Utility function to check if the queue is
full or not

template <class X> q.dequeue();

bool queue<X>::isFull() q.dequeue();

{ q.dequeue();

return (size() == capacity);

} if (q.isEmpty())

cout << "Queue Is Empty\n";

// main function else

int main() cout << "Queue Is Not


Empty\n";
{

// create a queue of capacity 4


return 0;
queue<string> q(4);
}

q.enqueue("a");

q.enqueue("b");

Output
3) Convert infix to postfix {

stack? if(full())

#include<iostream> {

#include<conio.h> cout<<"\n Stack overflow:\n";

using namespace std; }

class stack else

{ {

public: top=top+1;

char stack_array[50]; stack_array[top]=symbol;

int top; }

stack() }

{ char pop()

top=-1; {

} if(empty())

void push(char symbol) return('#');


else cout<<"\n Enter an infix expression that you
want to convert into postfix";
return(stack_array[top--]);
cin>>infix;
}
}
int empty()
int white_space(char symbol)
{
{
if(top==-1)
if(symbol==' ' || symbol=='\t' || symbol=='\0')
return(1);
return 1;
else
else
return(0);
return 0;
}
}
int full()
void ConvertToPostfix()
{
{
if(top==49)
stack s;
return(1);
int l,precedence,p;
else
char entry1,entry2;
return(0);
p=0;
}
for(int i=0;infix[i]!='\0';i++)
};
{
class Expression
entry1=infix[i];
{
if(!white_space(entry1))
char infix[50];
{
char postfix[50];
switch(entry1)
public:
{
void read()
case '(':
{
s.push(entry1);
break; break;

case ')': default:

while((entry2=s.pop())!='(') postfix[p++]=entry1;

postfix[p++]=entry2; break;

break; }

case '+': }

case '-': }

case '*': while(!s.empty())

case '/': postfix[p++]=s.pop();

if(!s.empty())

{ postfix[p]='\0';

precedence=prec(entry1); cout<<"\n The postfix expression is:


"<<postfix<<endl;
entry2=s.pop();
}
while(precedence<=prec(entry2))
int prec(char symbol)
{
{
postfix[p++]=entry2;
switch(symbol)
if(!s.empty())
{
entry2=s.pop();
case '/': return(4);
else
case '*': return(3);
break;
case '+': return(2);
}
case '-': return(1);
if(precedence>prec(entry2))
case '(': return(0);
s.push(entry2);
default: return(-1);
}
}
s.push(entry1);
}
}; expr.read();

int main() expr.ConvertToPostfix();

{ cout<<"\n\n Do you want to continue if yes


press y otherwise press n (y/n): ";
char choice='y';
cin>>choice;
Expression expr;
}
while(choice=='y')
}
{

Output

4) Balance Parenthesis public:

void createstack()
#include<iostream>
{
#include<conio.h>
top=1;
using namespace std;
}
const char size=10;
bool isempty()
class stack{
{
private:
return (top==-1);
int top;
}
char arr[size];
bool isFull()

{ }

return (top==size-1); void display()

} for(int i=0;i<10;i++)

void push(char value) {

if(isFull()) cout<<arr[i];

{ }

cout<<"Stack is full"<<"\n"; }

} };

else{ int main()

top=top+1; {

arr[top]=value; stack s1;

s1.createstack();

} int cont=1;

} char ch;

int pop(){ while(ch!='x'&&cont)

if(isempty()){ {

cout<<"Stack is empty"; ch=getche();

} if(ch=='('||ch==')')

else{ {

top--; if(ch=='('){

s1.push('(');
} cout<<endl<<"balanced";

else if(s1.isempty()) }

{ else{

cont=0; cout<<endl<<"not balanced";

} }

else{ return 0;

s1.pop(); }

if(ch=='x' && s1.isempty()) }

Output

You might also like