Showing posts with label stack. Show all posts
Showing posts with label stack. Show all posts

Saturday, February 7, 2015

Implementation of stack containing queues as elements data structure in C++

#include<iostream>
using namespace std;
class queue
{public:
int elmnt[6];
int front;
int rear;
int isempty();
void enqueue(int e);
    int dequeue();
    queue()
    {rear=-1;
     front=-1;
    }
};
int queue::isempty()
{if(front==-1)
  {
   return 1;
  }
  else
  return 0;
}
void queue::enqueue(int e)
{ rear=(rear+1)%3;
  elmnt[rear]=e;
  if(front==-1)
  front++;
}
int queue::dequeue()
{int c;
  if(isempty());
  else
   {c=elmnt[front];
    if(front==rear)
    {front=-1;
     rear=-1;
     return c;
    }
    else
     front=(front+1)%3;
    return(c);
   }
}
class stack
{public:
  queue q[10],r;
  int top,t,arr[50];
  void push(queue f);
  queue pop();
};
void stack::push(queue f)
{q[++top]=f;
}
queue stack::pop()
{
return q[top--];
}

int main()
{stack s;
 int no,i,j,n;
 s.top=-1;
 cout<<"Enter the no of stacks:";
 cin>>n;
 for(i=0;i<n;i++)
 {  cout<<"Enter in the "<<i+1<<" stack:\n";
    for(j=0;j<3;j++)
     {cin>>no;
 s.r.enqueue(no);
     }
    s.push(s.r);
 }
 for(i=n;i>0;i--)
  {cout<<"Thus the "<<i<<" stack contains;\n";
     s.r=s.pop();
      for(j=0;j<3;j++)
       {cout<<s.r.dequeue()<<" ";
       }
       cout<<endl;
  }
}

Stack of stack in C++

#include<iostream>
using namespace std;
class stack
{public:
  int top,t,arr[50];
  void push(int c);
  int pop();
};
void stack::push(int c)
{arr[++top]=c;
}
int stack::pop()
{t=arr[top--];
}
int main()
{stack s;int n,no,i,j,z,ctr=-1;
 s.top=-1;
 cout<<"no:";
 cin>>n;
 cout<<"-1\n";
 for(i=0;i<n;i++)
 {do
  {cin>>no;
   if(no!=-1)
   s.push(no);
   ++ctr;
  }
  while(no!=-1);
  s.push(ctr);
  ctr=-1;
 }
 for(i=n-1;i>=0;i--)
 {cout<<i+1<<" Stack\n";
    s.pop();
    z=s.t;
    for(j=0;j<z;j++)
    {s.pop();
    cout<<s.t<<endl;
    }
 }
}

Infix to Postfix using stack in C++

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
class stack
{ public:
  int top,t,i;char e[10],li[20];
  void push(char c);
  char pop();
  char pop2();
  char arr[10],h;
  int random();
};
void stack::push(char c)
{arr[++top]=c;
}
char stack::pop()
{ while(arr[top]=='-'  ||  arr[top]=='+'  ||  arr[top]=='*' || arr[top]=='/')
  e[++t]=arr[top--];
  push(li[i]);
}
char stack::pop2()
{ while(arr[top]=='*' || arr[top]=='/')
  e[++t]=arr[top--];
  push(li[i]);
}
int stack::random()
{ if(arr[0]=='+' && arr[1]=='-')
   {pop();}
   else if((arr[top]=='*') && (arr[(top+1)]=='-' || arr[top+1]=='+'))
   pop();
}
int main()
{stack s;int j,k,z;
 s.top=-1;s.t=-1;
 cout<<"Enter the infix expression:\n";
 cin.getline(s.li,20);
 j=strlen(s.li);
 cout<<"Hence the postfix of this expression is:\n";
 for(s.i=0;s.i<j;s.i++)
  {if(s.li[s.i]=='+')
     {if(s.top==-1)
 {s.push('+');}
 else
 {s.pop();
  for(k=0;k<=s.t;k++)
  {cout<<s.e[k];}}
  s.t=-1;}
   else if(s.li[s.i]=='-')
     {if(s.top==-1)
 {s.push('-');}
 else
 {s.pop();
  for(k=0;k<=s.t;k++)
  {cout<<s.e[k];}}
  s.t=-1;}
   else if(s.li[s.i]=='*')
    {if(s.top=='-' || s.top=='+' || s.top==-1)
 {s.push('*');}
 else
 {s.pop2();
  for(k=0;k<=s.t;k++)
  {cout<<s.e[k];}}
  s.t=-1;}
   else if(s.li[s.i]=='/')
    {if(s.top=='-' || s.top=='+'  ||  s.top==-1)
 {s.push('/');}
 else
 {s.pop2();
  for(k=0;k<=s.t;k++)
  {cout<<s.e[k];}}
  s.t=-1;}
   else
    cout<<s.li[s.i];
  }
  for(k=s.top;k>=0;k--)
  cout<<s.arr[k];
}

Contributors

Translate