Data structure (stack Implimentation)

// PROJECT ON IMPLEMENTATION OF DATA STRUCTURES GRAPHICALLY.

 # include<iostream.h>
# include<conio.h>
# include<graphics.h>
# include<dos.h>
# include<stdio.h>
# include<stdlib.h>
# include<ctype.h>
# include<math.h>

#define CH1 "1.STACK IMPLEMENTATION"
#define CH2    "2.STACK APPLICATION"
#define CH3    "3.QUEUE IMPLEMENTATION"
#define CH4    "4.LINK LIST IMPLEMENTATION"
#define    CH5    "5.Exit    "
#define CH6 "Enter your choice  : "
#define CH(ch) ch==1?CH1:(ch==2?CH2:(ch==3?CH3:CHO(ch)))
#define CHO(ch) ch==4?CH4:CH5

#define S  "STACK IMPLEMENTATION"
#define S1 " 1. CREATE STACK "
#define S2 " 2. PUSH"
#define S3 " 3. POP "
#define S4 " 4. EXIT TO MAIN MENU"
#define C5 " Enter your choice  : "
#define C(ch) ch==1?C1:(ch==2?C2:(ch==3?C3:C4))

#define Q  "QUEUE IMPLEMENTATION"
#define Q1 " 1. CREATE QUEUE "
#define Q2 " 2. ADD ELEMENT "
#define Q3 " 3. DELETE ELEMENT "
#define Q4 " 4. EXIT TO MAIN MENU "

#define L1 "1.ADD A NODE AT BEGIN "
#define L2 "2.ADD A NODE AT END "
#define L3 "3.ADD A NODE IN BETWEEN"
#define L4 "4.DELETE A NODE"
#define L5 "5.EXIT TO MAIN MENU"
#define L6 "ENTER YOUR CHOICE"
#define L(ch) ch==1?L1:(ch==2?L2:(ch==3?L3:(ch==4?L4:L5)))

#define L1 "1.ADD A NODE AT BEGIN "
#define L2 "2.ADD A NODE AT END "
#define L3 "3.ADD A NODE IN BETWEEN"
#define L4 "4.DELETE A NODE"
#define L5 "5.EXIT TO MAIN MENU"
#define L6 "ENTER YOUR CHOICE"
#define L(ch) ch==1?L1:(ch==2?L2:(ch==3?L3:(ch==4?L4:L5)))

class list
{
    struct node{
      int data;
      struct node *link;
    };
    int size;
    typedef struct node *nodeptr;
    nodeptr head;
    public:
    list()
    {
    head=new node;
    head->link=NULL;
    outtextxy(8,390,"Head");
    line(44,393,69,393);
    line(64,388,69,393);
    line(64,398,69,393);
    outtextxy(73,390,"NULL");
    size=0;
    }
    nodeptr create();
   // list* getnode();
    void add();
    void add(int x);
    void add(char end);
    void del();
};
void list::add()
{
    if(size<5)
    {
    nodeptr new1;
    new1=new node;
    setcolor(10);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"Enter the number to be added : ";
    cin>>new1->data;
    new1->link=head->link;
    head->link=new1;
    rectangle(70,285,150,335);
    line(130,285,130,335);
    gotoxy(12,20);
    cout<<new1->data;
    size++;
    delay(500);
    int area;
    char *buff;
    area=imagesize(70,365,525,416);
    buff=new char(area);
    getimage(70,365,525,416,buff);
    for(int j=70;j<170;)
    {
    putimage(j,365,buff,XOR_PUT);
    j++;
    putimage(j,365,buff,XOR_PUT);
    delay(5);
    }


    area=imagesize(70,285,150,335);
    buff=new char(area);
    getimage(70,285,150,335,buff);
    for(int i=285;i<=365;)
    {
    putimage(70,i,buff,XOR_PUT);
    i++;
    putimage(70,i,buff,XOR_PUT);
    delay(5);
    }
    int l;
    for(l=398,i=140,j=388;i<170;i++)
    {
     putpixel(i,393,WHITE);
     if(i>=164)
     {
         putpixel(i,j,WHITE);
         j++;
         putpixel(i,l,WHITE);
         l--;
     }
     delay(50);
    }
    setcolor(BLACK);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"                                          ";
    }
    else
    {
     outtextxy(275,175,"Sorry you cannot add more nodes");
     getch();
     setcolor(BLACK);
     outtextxy(275,175,"Sorry you cannot add more nodes");
     setcolor(WHITE);
    }
}
void list::add(char end)
{
    if(size<5)
    {
    nodeptr new1;
    new1=new node;
    setcolor(10);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"Enter the number to be added : ";
    cin>>new1->data;
    nodeptr temp=head;
    while(temp->link!=NULL)
    temp=temp->link;
    temp->link=new1;
    new1->link=NULL;
    rectangle(70+(size*100),285,150+(size*100),335);
    line(130+(size*100),285,130+(size*100),335);
    gotoxy(12+(size*12),20);
    cout<<new1->data;
    delay(1000);
    int area;
    char *buff;
    area=imagesize(70+(size*100),365,525,416);
    buff=new char(area);
    getimage(70+(size*100),365,525,416,buff);
    for(int j=70+(size*100);j<170+(size*100);)
    {
    putimage(j,365,buff,XOR_PUT);
    j++;
    putimage(j,365,buff,XOR_PUT);
    delay(5);
    }

    area=imagesize(70+(size*100),285,150+(size*100),335);
    buff=new char(area);
    getimage(70+(size*100),285,150+(size*100),335,buff);
    for(int i=285;i<=365;)
    {
    putimage(70+(size*100),i,buff,XOR_PUT);
    i++;
    putimage(70+(size*100),i,buff,XOR_PUT);
    delay(5);
    }
    int l;
    for(l=398,i=140+(size*100),j=388;i<170+(size*100);i++)
    {
     putpixel(i,393,WHITE);
     if(i>=164+(size*100))
     {
         putpixel(i,j,WHITE);
         j++;
         putpixel(i,l,WHITE);
         l--;
     }
     delay(50);
    }
    size++;
    setcolor(BLACK);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"                                          ";
    }
    else
    {
     outtextxy(275,175,"Sorry you cannot add more nodes");
     getch();
     setcolor(BLACK);
     outtextxy(275,175,"Sorry you cannot add more nodes");
     setcolor(WHITE);
    }
}


void list::add(int x)
{
    if(size<5)
    {
      nodeptr new1;
      nodeptr temp=head;
      int s=0;
      while(temp!=NULL&&temp->data!=x)
      {    temp=temp->link;
    s++;
      }
      if(temp==NULL)
      {
     outtextxy(275,175,"The number not found");
     getch();
     setcolor(BLACK);
     outtextxy(275,175,"The number not found");
     setcolor(WHITE);
      }
      else
      {
    new1=new node;
    setcolor(10);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"Enter the number to be added : ";
    cin>>new1->data;

    new1->link=temp->link;
    temp->link=new1;
    rectangle(70+(s*100),285,150+(s*100),335);
    line(130+(s*100),285,130+(s*100),335);
    gotoxy(12+(s*12),20);
    cout<<new1->data;
    delay(1000);
    int area;
    char *buff;
    area=imagesize(70+(s*100),365,525,416);
    buff=new char(area);
    getimage(70+(s*100),365,525,416,buff);
    for(int j=70+(s*100);j<170+(s*100);)
    {
        putimage(j,365,buff,XOR_PUT);
        j++;
        putimage(j,365,buff,XOR_PUT);
        delay(5);
    }

    area=imagesize(70+(s*100),285,150+(s*100),335);
    buff=new char(area);
    getimage(70+(s*100),285,150+(s*100),335,buff);
    for(int i=285;i<=365;)
    {
        putimage(70+(s*100),i,buff,XOR_PUT);
        i++;
        putimage(70+(s*100),i,buff,XOR_PUT);
        delay(5);
    }
    int l;
    for(l=398,i=140+(s*100),j=388;i<170+(s*100);i++)
    {
        putpixel(i,393,WHITE);
        if(i>=164+(s*100))
        {
            putpixel(i,j,WHITE);
            j++;
            putpixel(i,l,WHITE);
            l--;
        }
        delay(50);
    }
    size++;
    setcolor(BLACK);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"                                          ";
      }
    }
    else
    {
     outtextxy(275,175,"Sorry you cannot add more nodes");
     getch();
     setcolor(BLACK);
     outtextxy(275,175,"Sorry you cannot add more nodes");
     setcolor(WHITE);
    }
}
void list::del()
{
  if(head->link!=NULL)
  {
    nodeptr temp,temp1;
    temp=head;
    int s=0,x;
    setcolor(10);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"Enter the number to be deleted : ";
    cin>>x;


    while(temp->link!=NULL&&temp->link->data!=x)
    {
    temp=temp->link;
    s++;
    }
    if(temp->link==NULL)
    {
    outtextxy(300,175,"The number not found");
    getch();
    setcolor(BLACK);
    outtextxy(300,175,"The number not found");
    setcolor(WHITE);
    }
    else
    {
    temp1=temp->link;
    temp->link=temp->link->link;
    //delete(temp1);
    int area=imagesize(70+(s*100),365,169+(s*100),416);
    char *buff;
    buff=new char(area);
    getimage(70+(s*100),365,169+(s*100),416,buff);
    putimage(70+(s*100),365,buff,XOR_PUT);
    area=imagesize(170+(s*100),365,610,416);
    buff=new char(area);
    getimage(170+(s*100),365,610,416,buff);
    for(int i=170+(s*100);i>170+(s*100)-100;)
    {
        putimage(i,365,buff,XOR_PUT);
        i--;
        putimage(i,365,buff,XOR_PUT);
        delay(5);
    }
    size--;
    }
    setcolor(BLACK);
    rectangle(288,98,602,152);
    rectangle(290,100,600,150);
    gotoxy(39,8);
    cout<<"                                         ";

  }
  else
  {
      outtextxy(300,175,"The list is empty");
      getch();
      setcolor(BLACK);
      outtextxy(300,175,"The list is empty");
      setcolor(WHITE);
  }
}



void funct1()
{
    //cleardevice();
    int gd,gm,maxx,maxy,x,y;
    detectgraph(&gd,&gm);
    initgraph(&gd,&gm,"c:\\tc\\");
    maxx=getmaxx();
    maxy=getmaxy();
    rectangle(0,0,maxx,maxy);
    int ch=1;
    list ptr;
    do
    {
        x=0;
        gotoxy(20,8);
        settextstyle(10,0,2);
        setcolor(9);
        outtextxy(85,10,"Link List Implementation");
        setcolor(10);
        rectangle(0,0,maxx,maxy);
        rectangle(2,2,maxx-2,maxy-2);
        rectangle(40,60,250,230);
        rectangle(38,58,252,232);
        line(40,205,250,205);
        setcolor(WHITE);
        settextstyle(0,0,1);
        outtextxy(50,75,L1);
        outtextxy(50,100,L2);
        outtextxy(50,125,L3);
        outtextxy(50,150,L4);
        outtextxy(50,175,L5);
        outtextxy(50,213,L6);
        gotoxy(29,14);
        printf("%d",ch);
        setcolor(BLUE);
        outtextxy(50,50+(ch*25),L(ch));
        while(x!=13)
        {
            fflush(stdin);
            x=getch();
            sound(150);
            delay(25);
            nosound();
            setcolor(WHITE);
            outtextxy(50,50+(25*ch),L(ch));
            if(x==80)
                ch=(ch==5?1:ch+1);
            else
               if(x==72)
                ch=(ch==1?5:ch-1);
            setcolor(BLUE);
            outtextxy(50,50+(25*ch),L(ch));
            gotoxy(29,14);
            printf("%d",ch);
        }
        setcolor(WHITE);
        switch(ch)
        {
            case 1:ptr.add();
                   break;
            case 2:ptr.add('e');
                   break;
            case 3:int x;
                   outtextxy(50,245,"Enter the number after which to insert:");
                   gotoxy(47,16);
                   cin>>x;
                   ptr.add(x);
                   gotoxy(5,16);
                   cout<<"                                               ";
                   break;
            case 4:ptr.del();
                   break;
        }
    }while(ch!=5);
     //closegraph();
     //restorecrtmode();
}
//************************ Stack
class***************************************
class stack1
{
     int max,flag;
     protected:
     float a[10];
     int top;
     public:
     int create();
     void push1();
     void pop1();
     inline int is_full()
     {
      if(top==max-1)
          return(1);
      else
          return(0);
     }
     inline int is_empty()
     {
      if(top==-1)
           return(1);
      else
           return(0);
     }
};
// **** defination of member functions of stack1 ****
int stack1::create()
{
     gotoxy(5,17);
     setcolor(10);
     if(flag==1)
     {   setcolor(WHITE);
     outtextxy(50,275,"Do you want to create new stack(Y/N)");
     char c=getch();
     setcolor(BLACK);
     if((c=='y')||(c=='Y'))
     {
        outtextxy(50,275,"Do you want to create new stack(Y/N)");
        rectangle(500,400-(30*max),575,400);
        for(int i=1;i<max;i++)
        line(500,400-(30*i),575,400-(30*i));
        outtextxy(400,413-(top*30)-30,"STACK TOP ->    -1");
        outtextxy(400,413,"STACK TOP ->    -1");
        int area;
        char *buff;
        area=imagesize(510,15,565,30);
        buff=new char[area];
        for(;top>=0;top--)
        {
        getimage(510,375-(top*30),565,375-(top*30)+15,buff);
        putimage(510,375-(top*30),buff,XOR_PUT);
        }
        delete(buff);
      }
      else
      {
        outtextxy(50,275,"Do you want to create new stack(Y/N)");
        return(0);
      }

     }
     setcolor(10);
     rectangle(40,260,350,300);
     rectangle(38,258,352,302);
     setcolor(WHITE);
     outtextxy(50,275,"Enter the size of stack :  _");
     outtextxy(60,285,"(maximum size 10)");
     gotoxy(34,18);
     cin>>max;
     //gotoxy(34,18);
     while(max>10)
     {
      gotoxy(5,19);
      outtextxy(50,315,"Please enter size upto 10 ");
      gotoxy(34,18);
      cout<<"    ";
      gotoxy(34,18);
      cin>>max;
     }
     flag=1;
     top=-1;
     setcolor(WHITE);
     for(int i=400-(30*max);i<=400;i++)
     {
     putpixel(500,i,WHITE);
     delay(5);
     }
     for(i=500;i<=575;i++)
     {
     putpixel(i,400,WHITE);
     delay(5);
     }
     for(i=400;i>=(400-(30*max));i--)
     {
     putpixel(575,i,WHITE);
     delay(5);
     }
     for(i=575;i>=500;i--)
     {
     putpixel(i,400-(30*max),WHITE);
     delay(5);
     }
     for( i=1;i<max;i++)
       for(int j=500;j<=575;j++)
       {
     putpixel(j,400-(30*i),WHITE);
     delay(5);
       }
     outtextxy(400,413,"STACK TOP ->    -1");
     setcolor(BLACK);
     rectangle(40,260,350,300);
     rectangle(38,258,352,302);
     outtextxy(50,275,"Enter the size of stack :  _");
     gotoxy(34,18);
     cout<<"      " ;
     outtextxy(60,285,"(maximum size 10)");
     outtextxy(50,315,"Please enter size upto 10 ");
     return(0);
}
void stack1::push1()
{
if(flag==1)
{
    if(is_full())
    {
    outtextxy(50,270,"Stack is full ");
    getch();
    setcolor(BLACK);
    outtextxy(50,270,"Stack is full ");
    setcolor(WHITE);
    }
    else
    {
     setcolor(10);
     rectangle(40,260,360,300);
     rectangle(38,258,362,302);
     setcolor(WHITE);
     outtextxy(50,275,"Enter the number to be pushed :");
     gotoxy(39,18);
     cin>>a[++top];
     int j=1;
     for(int i=500;i<575;i++)
     {
     putpixel(i,(400-(max*30)),BLACK);
     putpixel(575+j,(400-(max*30)),WHITE);
     j++;
     delay(20);
     }
     gotoxy(65,2);
     cout<<a[top];
     int area;
     char *buff;
     area=imagesize(510,15,565,30);
     buff=new char[area];
     getimage(510,15,565,30,buff);
     for(i=15;i<=375-(top*30);)
     {
     putimage(510,i,buff,XOR_PUT);
     i++;
     putimage(510,i,buff,XOR_PUT);
     delay(5);
     }
     delete(buff);
     for( i=575;i>=500;i--)
     {
     putpixel(575+j,(400-(max*30)),BLACK);
     putpixel(i,(400-(max*30)),WHITE);
     j--;
     delay(20);
     }
     area=imagesize(400,413,495,430);
     buff=new char(area);    //for stack ptr movement
     getimage(400,413-(top*30),495,430-(top*30),buff);
     for(i=413-(top*30);i>413-(top*30)-30;)
     {
     putimage(400,i,buff,XOR_PUT);
     i--;
     putimage(400,i,buff,XOR_PUT);
     delay(10);
     }
     setcolor(BLACK);
     rectangle(40,260,360,300);
     rectangle(38,258,362,302);
     outtextxy(50,275,"Enter the number to be pushed :");
     gotoxy(39,18);
     cout<<"        ";
     setcolor(WHITE);
     delete(buff);
    }
}
else
{
      outtextxy(50,270,"First create a stack");
      getch();
      setcolor(BLACK);
      outtextxy(50,270,"First create a stack");
      setcolor(WHITE);
}
} //********* end of push function **********
//******************** pop function ***********
void stack1::pop1()
{
    if(flag==1)
    {
    if(is_empty())
    {
        outtextxy(50,270,"Stack is empty ");
        getch();
        setcolor(BLACK);
        outtextxy(50,270,"Stack is empty ");
        setcolor(WHITE);
    }
    else
    {
        char *buff;
        int area;
        int j=1;
        setcolor(10);
        rectangle(40,260,360,300);
        rectangle(38,258,362,302);
        setcolor(WHITE);
        outtextxy(50,275,"The poped element is :");
        gotoxy(33,18);
        cout<<a[top];

        for(int i=500;i<575;i++)
        {
        putpixel(i,(400-(max*30)),BLACK);
        putpixel(575+j,(400-(max*30)),WHITE);
        j++;
        delay(20);
        }
        area=imagesize(510,15,565,30);
        buff=new char[area];
        getimage(510,375-(top*30),565,375-(top*30)+15,buff);

        for( i=375-(top*30);i>=0;)
        {
        putimage(510,i,buff,XOR_PUT);
        i--;
        putimage(510,i,buff,XOR_PUT);
        delay(5);
        }
        delete(buff);
        for( i=575;i>=500;i--)
        {
        putpixel(575+j,(400-(max*30)),BLACK);
        putpixel(i,(400-(max*30)),WHITE);
        j--;
        delay(20);
        }
        area=imagesize(400,413,495,430);
        buff=new char(area);    //for stack ptr movement
        getimage(400,413-(top*30)-30,495,430-(top*30)-30,buff);
        for(i=413-(top*30)-30;i<413-(top*30);)
        {
        putimage(400,i,buff,XOR_PUT);
        i++;
        putimage(400,i,buff,XOR_PUT);
        delay(10);
        }
        delete(buff);
        top--;
        getch();
        setcolor(BLACK);
        rectangle(40,260,360,300);
        rectangle(38,258,362,302);
        outtextxy(50,275,"The poped element is :");
        gotoxy(33,18);
        cout<<"        ";
    }
    }
    else
    {
    outtextxy(50,270,"First create a stack");
    getch();
    setcolor(BLACK);
    outtextxy(50,270,"First create a stack");
    setcolor(WHITE);
    }
}
//**************** end of pop function *****************
class post:public stack1
{
    public:
    void create(int);
    void postfix(char *,char*);
    int isoperand(char);
    int prcd(char,char);
    void push(char);
    char pop();
};
void post :: create(int n)
{
    settextstyle(0,0,1);
    //cleardevice();
    rectangle(500,100,575,400);
    for(int i=1;i<n;i++)
    line(500,100+(i*30),575,100+(i*30));
    top=-1;
    outtextxy(450,415,"Top ->");
}
void post::push(char x)
{
    a[++top]=x;
    gotoxy(67,25-(top*2));
    cout<<x;
    setcolor(BLACK);
    outtextxy(450,415-(top*30),"Top ->");
    setcolor(WHITE);
    outtextxy(450,415-(top*30)-30,"Top ->");
    delay(2000);
}
char post::pop()
{
    setcolor(BLACK);
    gotoxy(67,25-(top*2));
    cout<<"  " ;
    outtextxy(450,415-(top*30)-30,"Top ->");
    setcolor(WHITE);
    outtextxy(450,415-(top*30),"Top ->");
    delay(2000);
    return(a[top--]);
}
int post::prcd(char op1,char op2)
{
     int a,b;
     switch(op1)
     {
     case '$':a=4;break;
     case '/':a=3;break;
     case '*':a=2;break;
     case '+':a=1;break;
     case '-':a=1;break;
     //case '(':a=0;break;
     //default :a=-1;
     }
     switch(op2)
     {
     case '$':b=4;break;
     case '/':b=3;break;
     case '*':b=2;break;
     case '+':b=1;break;
     case '-':b=1;break;
     //case '(':b=0;
     //default :b=-1;
     }
     if(op1=='(')
     return(0);
     if(op2=='('&&op1!=')')
     return(0);
     if(op2==')'&&op1!='(')
     return(1);
     if(op1=='$'&&op2=='$')
     return(0);
     if(a>=b)
     return(1);
     else
     return(0);
}
void post :: postfix(char infix[],char postr[])
{
    int i=1;
    int position,und;
    int outpos=0;
    char topsym,sym;
    create(10);
    for(position=0;(sym=infix[position])!='\0';position++)
    {
     if(isdigit(sym))
     {   postr[outpos++]=sym;
         postr[outpos]='\0';
         gotoxy(4,5+ ++i);
         cout<<postr<<endl;
     }
     else
     {
         while(!is_empty()&&prcd(a[top],sym))
         {
         topsym=pop();
         postr[outpos++]=topsym;
         postr[outpos]='\0';
         gotoxy(4,5+ ++i);
         cout<<postr<<endl;
         }
         //if(!is_empty())
           //    push(topsym);
         if(is_empty()||(sym!=')'))
        push(sym);
         else
         {    topsym=pop();
        delay(2000);   }
      } //end of else
    }
    while(!is_empty())
    {    postr[outpos++]=pop();
    postr[outpos]='\0';
    gotoxy(4,5+ ++i);
    cout<<postr;
    }
    postr[outpos]='\0';
    delay(1000);
    return;
}// end of postfix

class evaluate : public post
{
    public:
    void push(float);
    float pop();
    float oper(int ,float ,float);
    float eval(char[]);
};
void evaluate:: push(float x)
{
    a[++top]=x;
    gotoxy(64,25-(top*2));
    cout<<x;
    setcolor(BLACK);
    outtextxy(450,415-(top*30),"Top ->");
    setcolor(WHITE);
    outtextxy(450,415-(top*30)-30,"Top ->");
    delay(2000);
}
float evaluate::pop()
{
    setcolor(BLACK);
    gotoxy(64,25-(top*2));
    cout<<"        " ;
    outtextxy(450,415-(top*30)-30,"Top ->");
    setcolor(WHITE);
    outtextxy(450,415-(top*30),"Top ->");
    delay(2000);
    return(a[top--]);
}
float evaluate::oper(int symb,float op1,float op2)
{
    switch(symb)
    {
    case '+':return(op1+op2);
    case '-':return(op1-op2);
    case '*':return(op1*op2);
    case '/':return(op1/op2);
    case '$':return(pow(op1,op2));
    default :cout<<"illegal operation" ;
         return(0);
    }
}

float evaluate::eval(char expr[])
{
    int c,position,i=1;
    float opnd1,opnd2,value;
    create(10);
    for(position=0;(c=expr[position])!='\0';position++)
    if(isdigit(c))
       push(float(c-'0'));
    else
    {
       opnd2=pop();
       opnd1=pop();
       gotoxy(3,6+ ++i);
       cout<<opnd1;
       delay(1000);
       gotoxy(14,6+i);
       cout<<opnd2;
       delay(1000);
       gotoxy(24,6+i);
       cout<<(char)c;
       value=oper(c,opnd1,opnd2);
       gotoxy(34,6+i);
       cout<<value;
       push(value);
    }
    return(pop());
}

void funct3()
{
    cleardevice();
    post p;
    char infix[80],postr[80];
    int pos=0;
    setcolor(BLUE);
    settextstyle(10,0,2);
    outtextxy(150,25,"Application of Stack");
    rectangle(0,0,getmaxx(),getmaxy());
    rectangle(2,2,getmaxx()-2,getmaxy()-2);
    setcolor(WHITE);
    settextstyle(1,0,2);
    outtextxy(75,150,"Stack is used for conversion of infix expression
");
    outtextxy(75,175,"to postfix and to evaluate a postfix
expression");
    outtextxy(75,200,"You are required to enter an infix expression");
    outtextxy(75,225,"Note : You have to enter operands of single
digits");
    outtextxy(75,250,"       and use circular brackets rather than");
    outtextxy(75,275,"       square ones if needed");
    outtextxy(75,300,"       use $ for exponention operator");
    gotoxy(20,25);
    textcolor(YELLOW);
    cout<<"Press any key to continue ...." ;
    getch();
    cleardevice();
    setcolor(YELLOW);
    rectangle(0,0,getmaxx(),getmaxy());
    rectangle(2,2,getmaxx()-2,getmaxy()-2);
    setcolor(WHITE);
    gotoxy(4,2);
    textcolor(WHITE);
    cout<<"Enter the infix expression";
    gotoxy(4,3);
    while((infix[pos++]=getchar())!='\n')
    ;
    infix[--pos]='\0';
    gotoxy(4,4);
    cout<<"The original infix expression is :";
    gotoxy(4,5);
    cout<<infix;
    delay(500);
    gotoxy(4,25);
    cout<<"Executing..." ;
    setcolor(BLUE);
    outtextxy(450,50,"Conversion Stack");
    setcolor(WHITE);
    p.postfix(infix,postr);
    gotoxy(4,25);
    cout<<"             " ;
    gotoxy(4,22);
    cout<<"The  final postfix expression is :";
    gotoxy(4,23);
    cout<<postr;
    gotoxy(4,25);
    cout<<"Do you want to evaluate this expression(Y/N):";
    char ch=getch();
    evaluate e;
    if(ch=='Y'||ch=='y')
    {
    cleardevice();
    setcolor(YELLOW);
    rectangle(0,0,getmaxx(),getmaxy());
    rectangle(2,2,getmaxx()-2,getmaxy()-2);
    setcolor(BLUE);
    settextstyle(1,0,2);
    outtextxy(450,50,"Evaluation Stack");
    setcolor(WHITE);
    gotoxy(4,2);
    cout<<"The original infix expression was :";
    gotoxy(6,3);
    cout<<infix;
    gotoxy(4,4);
    cout<<"The postfix expression is :";
    gotoxy(6,5);
    cout<<postr;
    gotoxy(2,7);
    cout<<" Opnd1     Opnd2     operator    value";
    delay(1000);
    gotoxy(4,24);
    cout<<"Executing...";
    delay(100);
    float ans=e.eval(postr);
    gotoxy(4,24);cout<<"               ";
    gotoxy(4,20);
    cout<<"The final answer is : "<<ans;
    gotoxy(4,24);cout<<"Press any key to continue...";
    getch();
    }
}

//******************** Queue class
*******************************************
class queue1
{
    int a[10],front,rear,flag,max;
    public:
    void add();
    void del();
    int create();
    inline int isfull()
    {
    if(rear==max-1)
        return(1);
    else
        return(0);
    }
    inline int isempty()
    {
    if(rear==-1)
        return(1);
    else
        return(0);
    }
};
int queue1 :: create()    //for queue
{
     gotoxy(24,17);
     setcolor(10);
     if(flag==1)
     {   setcolor(WHITE);
     outtextxy(50,275,"Do you want to create new queue(Y/N)");
     char c=getch();
     setcolor(BLACK);
     if((c=='y')||(c=='Y'))
     {
        outtextxy(50,275,"Do you want to create new queue(Y/N)");
        rectangle(50,355,50+(50*max),390);
        for(int i=1;i<=max;i++)
        line(50+(i*50),355,50+(i*50),390);
        settextstyle(0,1,1);
        outtextxy(30+(rear*50)+50,395,"rear ->");
        outtextxy(53,395,"front ->");
        settextstyle(0,0,1);
        gotoxy(5,24);
        cout<<"                                                        ";
      }
      else
      {
        outtextxy(50,275,"Do you want to create new queue(Y/N)");
        return(0);
      }

     }
     setcolor(10);
     rectangle(190,260,500,300);
     rectangle(188,258,502,302);
     setcolor(WHITE);
     outtextxy(200,275,"Enter the size of queue :  _");
     outtextxy(210,285,"(maximum size 10)");
     gotoxy(53,18);
     cin>>max;
     while(max>10)
     {
      gotoxy(24,19);
      outtextxy(200,315,"Please enter size upto 10 ");
      gotoxy(53,18);
      cout<<"    ";
      gotoxy(53,18);
      cin>>max;
     }
     flag=1;
     front=0;
     rear=-1;
     setcolor(WHITE);
     rectangle(50,355,50+(max*50),390);
     for(int i=1;i<=max;i++)
     {
     line(50+(i*50),355,50+(i*50),390);
     }
     settextstyle(0,1,1);
     outtextxy(53,395,"front ->");
     outtextxy(30,395,"rear ->");
     settextstyle(0,0,1);
     setcolor(BLACK);
     rectangle(190,260,500,300);
     rectangle(188,258,502,302);
     outtextxy(200,275,"Enter the size of queue :  _");
     gotoxy(53,18);
     cout<<"        ";
     outtextxy(210,285,"(maximum size 10)");
     outtextxy(200,315,"Please enter size upto 10 ");
     return(0);
}//  ********end of create ***********
void queue1::add()
{
if(flag==1)
{
    if(isfull())
    {
    outtextxy(200,270,"Queue is full ");
    getch();
    setcolor(BLACK);
    outtextxy(200,270,"Queue is full ");
    setcolor(WHITE);
    }
    else
    {
     setcolor(10);
     rectangle(190,260,510,300);
     rectangle(188,258,512,302);
     setcolor(WHITE);
     outtextxy(200,275,"Enter the number to be added :");
     gotoxy(58,18);
     cin>>a[++rear];
     int j=1;
     for(int i=355;i<390;i++)
     {
     putpixel(50+(max*50),i,BLACK);
     putpixel(50+(max*50),390+j,WHITE);
     j++;
     delay(20);
     }
     gotoxy(75,24);
     cout<<a[rear];
     int area;
     char *buff;
     area=imagesize(590,365,630,380);
     buff=new char[area];
     getimage(590,365,630,380,buff);
     for(i=590;i>=60+(rear*50);)
     {
     putimage(i,365,buff,XOR_PUT);
     i--;
     putimage(i,365,buff,XOR_PUT);
     delay(5);
     }
     delete(buff);
     for( i=390;i>=355;i--)
     {
     putpixel(50+(max*50),390+j,BLACK);
     putpixel(50+(max*50),i,WHITE);
     j--;
     delay(20);
     }
     area=imagesize(20,395,30,460);
     buff=new char(area);    //for rear ptr movement
     getimage(20+(50*rear),395,30+(50*rear),460,buff);
     for(i=20+(rear*50);i<20+(rear*50)+50;)
     {
     putimage(i,395,buff,XOR_PUT);
     i++;
     putimage(i,395,buff,XOR_PUT);
     delay(10);
     }
     delete(buff);
     setcolor(BLACK);
     rectangle(190,260,510,300);
     rectangle(188,258,512,302);
     outtextxy(200,275,"Enter the number to be added :");
     gotoxy(58,18);
     cout<<"        ";
     setcolor(WHITE);
    }
}
else
{
      outtextxy(200,270,"First create a Queue");
      getch();
      setcolor(BLACK);
      outtextxy(200,270,"First create a Queue");
      setcolor(WHITE);
}
} //********* end of add function **********
void queue1::del()
{
    if(flag==1)
    {
    if(isempty())
    {
        outtextxy(200,270,"Queue is empty ");
        getch();
        setcolor(BLACK);
        outtextxy(200,270,"Queue is empty ");
        setcolor(WHITE);
    }
    else
    {
        char *buff;
        int area;
        int j=1;
        setcolor(10);
        rectangle(190,260,510,300);
        rectangle(188,258,512,302);
        setcolor(WHITE);
        outtextxy(200,275,"The deleted element is :");
        gotoxy(52,18);
        cout<<a[front];

        j=1;
        for(int i=390;i>355;i--)
        {
        putpixel(50,i,BLACK);
        putpixel(50,355-j,WHITE);
        j++;
        delay(20);
        }


        area=imagesize(590,365,630,380);
        buff=new char[area];
        getimage(60,365,95,380,buff);
        for(i=60;i>-30;)
        {
        putimage(i,365,buff,XOR_PUT);
        i--;
        putimage(i,365,buff,XOR_PUT);
        delay(5);
        }
        delete(buff);
        for(i=1;i<=rear;i++)
        {
           getimage(60+(i*50),365,95+(i*50),380,buff);
           for(j=60+(i*50);j>60+(i*50)-50;)
           {
            putimage(j,365,buff,XOR_PUT);
            j--;
            putimage(j,365,buff,XOR_PUT);
            delay(5);
           }
        }
        area=imagesize(20,395,30,460);
        buff=new char(area);    //for rear ptr movement
        getimage(20+(50*rear)+50,395,30+(50*rear)+50,460,buff);
        for(i=20+(rear*50)+50;i>20+(rear*50);)
        {
        putimage(i,395,buff,XOR_PUT);
        i--;
        putimage(i,395,buff,XOR_PUT);
        delay(10);
        }
        delete(buff);
        ///////////////////////////////////
        j=1;
        for( i=355-35;i<355;i++)
        {
        putpixel(50,i,BLACK);
        putpixel(50,355+j,WHITE);
        j++;
        delay(20);
        }

        for(i=0;i<rear;i++)
           a[i]=a[i+1];
        rear--;
        getch();
        setcolor(BLACK);
        rectangle(190,260,510,300);
        rectangle(188,258,512,302);
        outtextxy(200,275,"The deleted element is :");
        gotoxy(52,18);
        cout<<"        ";
    }
    }
    else
    {
    outtextxy(200,270,"First create a Queue");
    getch();
    setcolor(BLACK);
    outtextxy(200,270,"First create a Queue");
    setcolor(WHITE);
    }
}
//**************** end of del function *****************
void funct(char *C1,char *C2,char *C3,char *C4,char *title,int d,int g)
{
    cleardevice();
    int gd,gm,maxx,maxy,x,y;
    maxx=getmaxx();
    maxy=getmaxy();
    rectangle(0,0,maxx,maxy);
    int ch=1;
    stack1 s;
    queue1 q;
    gotoxy(20,8);
        settextstyle(10,0,2);
        setcolor(9);
        outtextxy(85,10,title);
        setcolor(10);
        rectangle(0,0,maxx,maxy);
        rectangle(2,2,maxx-2,maxy-2);
        rectangle(40+d,80,250+d,230);
        rectangle(38+d,78,252+d,232);
        line(40+d,205,250+d,205);
        setcolor(WHITE);
        settextstyle(0,0,1);
        outtextxy(50+d,100,C1);
        outtextxy(50+d,125,C2);
        outtextxy(50+d,150,C3);
        outtextxy(50+d,175,C4);
        outtextxy(50+d,213,C5);

    do
    {
        x=0;
        gotoxy(29+g,14);
        printf("%d",ch);
        setcolor(BLUE);
        outtextxy(50+d,75+(ch*25),C(ch));
        while(x!=13)
        {
            fflush(stdin);
            x=getch();
            sound(150);
            delay(25);
            nosound();
            setcolor(WHITE);
            outtextxy(50+d,75+(25*ch),C(ch));
            if(x==80)
                ch=(ch==4?1:ch+1);
            else
               if(x==72)
                ch=(ch==1?4:ch-1);
            setcolor(BLUE);
            outtextxy(50+d,75+(25*ch),C(ch));
            gotoxy(29+g,14);
            printf("%d",ch);
        }
        setcolor(WHITE);

        switch(ch)
        {
            case 1:if(d==0)
                 s.create();
                   else
                 q.create();
                   break;
            case 2:if(d==0)
                  s.push1();
                   else
                  q.add();
                   break;
            case 3:if(d==0)
                  s.pop1();
                   else
                  q.del();
                   break;
        }
    }while(ch!=4);
}
// ************** End of funct function *************


//************************ Main function
************************************
void main()
{
    int gd=DETECT,gm,maxx,maxy;
    initgraph(&gd,&gm,"c:\\tc\\");
    maxx=getmaxx();
    maxy=getmaxy();
    rectangle(0,0,maxx,maxy);
    setcolor(YELLOW);
    settextstyle(7,0,1);
    delay(1000);
    outtextxy(maxx/2-textwidth("A")/2,10,"A");
    outtextxy(maxx/2-textwidth("Project on")/2,30,"Project on");
    delay(2000);
    //sound(500);
    //delay(2000);
    //nosound();
    setcolor(9);
    settextstyle(10,0,3);
   
outtextxy(maxx/2-textwidth("IMPLEMENTATION")/2,50,"IMPLEMENTATION");
    outtextxy(maxx/2-textwidth("OF")/2,100,"OF");
    outtextxy(maxx/2-textwidth("DATA  STRUCTURES")/2,150,"DATA
STRUCTURES");
    //sound(400);
    delay(1500);
    //nosound();
    setcolor(YELLOW);
    settextstyle(7,0,2);
    outtextxy(maxx/2-textwidth("Prepared by")/2,240,"Prepared by");
    setcolor(WHITE);
    settextstyle(1,0,2);
    char r[]="   NAME              ROLL NO";
    outtextxy(177,455,r);
    //delay(1000);
    char *buff;
    int area;
    area=imagesize(177,280,535,300);
    buff=new char(area);
    getimage(177,455,535,475,buff);
    int x=177,y=455;
    for(;y>=280;)
    {
      // sound(500);
       putimage(x,y,buff,XOR_PUT);
       y=y-1;
       putimage(x,y,buff,XOR_PUT);
    }
    nosound();
    delete(buff);
    for(int i=200;i<=270;i++)
    {
    putpixel(i,305,WHITE);
    delay(10);
    }
    char a[]=" Swapnil B adsure         01  ";
    outtextxy(140,455,a);
    area=imagesize(140,455,498,475);
    buff=new char(area);
    getimage(140,455,498,475,buff);
    x=140;
    y=455;
    for(;y>=320;)
    {
     putimage(x,y,buff,XOR_PUT);
     y=y-1;
     putimage(x,y,buff,XOR_PUT);
    }
       delete(buff);
    char q[]="Press any key to continue . . . .";
    delay(500);
    settextstyle(6,0,1);
    setcolor(YELLOW);
    outtextxy(maxx/2-textwidth(q)/2,400,q);
    getch();
    cleardevice();
    int ch=1;
    maxx=getmaxx();
    maxy=getmaxy();
    rectangle(0,0,maxx,maxy);

    do
    {
        int x=0;
        cleardevice();
        //gotoxy(20,8);
        settextstyle(10,0,1);
        setcolor(YELLOW);
        outtextxy(225,64,"  MAIN MENU  ");
        rectangle(0,0,maxx,maxy);
        rectangle(2,2,maxx-2,maxy-2);
        rectangle(160,130,500,335);
        rectangle(158,128,502,337);
        rectangle(385,300,405,320);
        rectangle(383,298,407,322);
        line(160,285,500,285);
        setcolor(WHITE);
        settextstyle(1,0,1);
        outtextxy(180,150,CH1);
        outtextxy(180,175,CH2);
        outtextxy(180,200,CH3);
        outtextxy(180,225,CH4);
        outtextxy(180,250,CH5);
        outtextxy(180,295,CH6);

        gotoxy(50,20);
        printf("%d",ch);
        settextstyle(1,0,1);
        setcolor(BLUE);
        outtextxy(180,125+(ch*25),CH(ch));
        while(x!=13)
        {
            fflush(stdin);
            x=getch();
            sound(150);
            delay(25);
            nosound();
            setcolor(WHITE);
            outtextxy(180,125+(25*ch),CH(ch));
            if(x==80)
                ch=(ch==5?1:ch+1);
            else
               if(x==72)
                ch=(ch==1?5:ch-1);
            setcolor(BLUE);
            outtextxy(180,125+(25*ch),CH(ch));
            gotoxy(50,20);
            printf("%d",ch);
        }
        setcolor(WHITE);
        //settextstyle(0,0,1);
        switch(ch)
        {
            case 1:funct(S1,S2,S3,S4,S,0,0);
                   break;
            case 2:funct3();
                   break;
            case 3:funct(Q1,Q2,Q3,Q4,Q,150,19);
                   break;
            case 4:closegraph();
                   funct1();
                   break;

        }
    }while(ch!=5);
    cleardevice();
    settextstyle(4,0,5);
    rectangle(0,0,maxx,maxy);
    rectangle(2,2,maxx-2,maxy-2);
    setcolor(RED);
    outtextxy(200,100,"Prepared by");
    setcolor(YELLOW);
    outtextxy(150,300,"Swapnil B adsure");
    getch();
    closegraph();
    restorecrtmode();
    //return(0);
}

No comments:

Post a Comment

 
;