# include <iostream.h>
# include <graphics.h>
# include <stdlib.h>
# include <conio.h>
# include <dos.h>
# define INSERT 0
# define DELETE 1
# define NORMAL 0
# define WARNING 1
class Linked_list_Queue
{
private:
char fill_pattern[8];
int inserted_element_count;
struct node
{
long data;
node *next;
};
node *rear;
node *entry;
node *print;
node *front;
public:
Linked_list_Queue( );
long get_element( );
void Delete( );
void Insert( );
void print_linked_list( );
void show_working( );
void show_main_screen( );
void waiting_for_input( );
void show_element_screen(int);
void clear_element_screen(int);
void show_linked_list_screen( );
void show_output_screen(int);
void show_window(int,int,int,int);
};
/**************************************************************************///---------------------- Linked_list_Queue( ) --------------------------///**************************************************************************/
Linked_list_Queue::Linked_list_Queue ( )
{
rear=NULL;
front=NULL;
inserted_element_count=0;
fill_pattern[0]=0xAA;
fill_pattern[1]=0x55;
fill_pattern[2]=0xAA;
fill_pattern[3]=0x55;
fill_pattern[4]=0xAA;
fill_pattern[5]=0x55;
fill_pattern[6]=0xAA;
fill_pattern[7]=0x55;
}
/**************************************************************************///-------------------- show_window(int,int,int,int) --------------------///**************************************************************************/void Linked_list_Queue::show_window(int x_1,int y_1,int x_2,int y_2)
{
setcolor(15);
rectangle(x_1,y_1,x_2,y_2);
rectangle(x_1+1,y_1+1,x_2-1,y_2-1);
setcolor(7);
rectangle(x_1+2,y_1+2,x_2-2,y_2-2);
rectangle(x_1+3,y_1+3,x_2-3,y_2-3);
rectangle(x_1+4,y_1+4,x_2-4,y_2-4);
setcolor(8);
rectangle(x_1+5,y_1+5,x_2-5,y_2-5);
rectangle(x_1+6,y_1+6,x_2-6,y_2-6);
rectangle(x_1+7,y_1+7,x_2-7,y_2-7);
}
/**************************************************************************///---------------------- show_main_screen( ) ---------------------------///**************************************************************************/void Linked_list_Queue ::show_main_screen( )
{
setcolor(15);
setlinestyle(1,0,3);
rectangle(5,5,getmaxx( )-5,getmaxy( )-5);
setlinestyle(0,0,0);
show_window(5,5,getmaxx( )-5,80);
setfillpattern(fill_pattern,4);
bar(13,13,getmaxx( )-13,72);
settextstyle(3,0,4);
setcolor(0);
outtextxy(17,22,"Implementation of Linked List as Queue");
outtextxy(18,22,"Implementation of Linked List as Queue");
setcolor(14);
outtextxy(19,20,"Implementation of Linked List as Queue");
outtextxy(20,20,"Implementation of Linked List as Queue");
outtextxy(21,20,"Implementation of Linked List as Queue");
show_window(5,82,305,getmaxy( )-5);
setfillpattern(fill_pattern,9);
bar(14,91,296,getmaxy( )-14);
setcolor(6);
setfillstyle(1,6);
pieslice(215,105,0,360,10);
setcolor(2);
setfillstyle(1,2);
pieslice(245,105,0,360,10);
setcolor(4);
setfillstyle(1,4);
pieslice(275,105,0,360,10);
setcolor(7);
circle(215,105,11);
circle(245,105,11);
circle(275,105,11);
show_window(307,82,getmaxx( )-5,getmaxy( )-5);
settextstyle(7,0,4);
setcolor(0);
outtextxy(16,111,"Press:");
setcolor(10);
outtextxy(17,110,"Press:");
outtextxy(18,110,"Press:");
settextstyle(2,0,6);
setcolor(0);
outtextxy(59,151,"<I> to Insert an Element");
outtextxy(59,171,"<D> to Delete an Element");
outtextxy(59,191,"<E> to Exit");
setcolor(14);
outtextxy(60,150,"<I> to Insert an Element");
outtextxy(61,150,"<I> to Insert an Element");
outtextxy(60,170,"<D> to Delete an Element");
outtextxy(61,170,"<D> to Delete an Element");
outtextxy(60,190,"<E> to Exit");
outtextxy(61,190,"<E> to Exit");
setfillstyle(2,1);
bar(317,92,getmaxx( )-15,getmaxy( )-15);
}
/**************************************************************************///--------------------- show_linked_list_screen( ) ---------------------///**************************************************************************/void Linked_list_Queue::show_linked_list_screen( )
{
for(int count=0;count<=187;count++)
{
setfillstyle(1,0);
bar(317,280,getmaxx( )-15,278-count);
bar(317,280,getmaxx( )-15,278+count);
delay(5);
}
setcolor(12);
settextstyle(2,0,7);
outtextxy(405,400,"Linked List (Queue)");
outtextxy(406,400,"Linked List (Queue)");
outtextxy(407,400,"Linked List (Queue)");
setfillstyle(1,6);
bar(402,420,618,422);
setcolor(15);
setlinestyle(0,0,3);
rectangle(330,405,390,435);
setfillstyle(1,9);
bar(331,406,374,434);
setfillstyle(1,1);
bar(376,406,389,434);
line(375,405,375,435);
setcolor(7);
setlinestyle(0,0,0);
line(352,425,352,455); /* Entry->Data pointing arrow */
line(352,455,415,455);
line(412,452,415,455);
line(412,458,415,455);
line(382,423,382,443); /* Entry->Next pointing arrow */
line(382,443,415,443);
line(412,440,415,443);
line(412,446,415,443);
setfillstyle(1,15);
pieslice(382,420,0,360,2);
settextstyle(0,0,1);
setcolor(15);
outtextxy(320,402,"*");
setcolor(9);
outtextxy(420,452,"Entry->Data");
outtextxy(420,438,"Entry->Next (x=NULL)");
setcolor(11);
outtextxy(333,417,"00000");
}
/**************************************************************************///----------------------- show_output_screen(int) ----------------------///**************************************************************************/void Linked_list_Queue::show_output_screen(int NORMAL_WARNING)
{
int x_1;
int x_2;
int y_1;
int y_2;
if(NORMAL_WARNING==NORMAL)
{
x_1=20;
x_2=280;
y_1=277;
y_2=350;
}
if(NORMAL_WARNING==WARNING)
{
x_1=20;
x_2=280;
y_1=277;
y_2=367;
}
setcolor(15);
setlinestyle(1,0,3);
rectangle(x_1,y_1,x_2,y_2);
setlinestyle(0,0,0);
setcolor(15);
rectangle(x_1,y_1,x_2,y_2);
setcolor(7);
rectangle(x_1+1,y_1+1,x_2-1,y_2-1);
setcolor(8);
rectangle(x_1+2,y_1+2,x_2-2,y_2-2);
setfillstyle(1,9);
bar(x_1+3,y_1+3,x_2-3,y_2-3);
}
/**************************************************************************///---------------------- show_element_screen(int) ----------------------///**************************************************************************/void Linked_list_Queue::show_element_screen(int INSERT_DELETE)
{
show_output_screen(NORMAL);
if(INSERT_DELETE==INSERT)
{
settextstyle(2,0,6);
setcolor(0);
outtextxy(28,281,"Enter the Element :");
setcolor(11);
outtextxy(29,280,"Enter the Element :");
outtextxy(30,280,"Enter the Element :");
}
elseif(INSERT_DELETE==DELETE)
{
settextstyle(2,0,6);
setcolor(0);
outtextxy(28,281,"Deleted Element is :");
setcolor(11);
outtextxy(29,280,"Deleted Element is :");
outtextxy(30,280,"Deleted Element is :");
}
delay(300);
for(int count=1;count<=65;count++)
{
setcolor(0);
setfillstyle(1,0);
bar(180-count,306,180+count,330);
pieslice(180-count,318,0,360,12);
pieslice(180+count,318,0,360,12);
setcolor(15);
line(180-count,302,180+count,302);
line(180-count,334,180+count,334);
arc(180-count,318,90,270,16);
arc(180+count,318,270,90,16);
setcolor(7);
arc(180-count,318,90,270,15);
arc(180-count,318,90,270,14);
line(180-count,303,180+count,303);
line(180-count,304,180+count,304);
line(180-count,333,180+count,333);
line(180-count,332,180+count,332);
arc(180+count,318,270,90,15);
arc(180+count,318,270,90,14);
setcolor(8);
line(180-count,305,180+count,305);
line(180-count,331,180+count,331);
arc(180-count,318,90,270,13);
arc(180+count,318,270,90,13);
delay(4);
}
}
/**************************************************************************///------------------- clear_element_screen(int) ------------------------///**************************************************************************/void Linked_list_Queue::clear_element_screen(int NORMAL_WARNING)
{
if(NORMAL_WARNING==WARNING)
{
for(int count=1;count<=50;count++)
{
setfillpattern(fill_pattern,9);
bar(18,275,290,275+count);
bar(18,375,290,375-count);
delay(20);
}
}
elseif(NORMAL_WARNING==NORMAL)
{
for(int count=1;count<=40;count++)
{
setfillpattern(fill_pattern,9);
bar(18,275,290,275+count);
bar(18,355,290,355-count);
delay(20);
}
}
}
/**************************************************************************///---------------------------- get_element( ) --------------------------///**************************************************************************/long Linked_list_Queue::get_element( )
{
show_element_screen(INSERT);
int count=0;
charstring[6]={'\0'};
do
{
int key_code=0;
char key=NULL;
if(kbhit( ))
key=getch( );
key_code=int(key);
if(key_code>=48 && key_code<=57)
{
string[count]=key;
count++;
}
elseif(key_code==8 && count>0)
{
setfillstyle(1,0);
bar(130,306,230,330);
count--;
string[count]='\0';
}
elseif(key_code==13 && count>0)
break;
setcolor(12);
settextstyle(2,0,7);
moveto(140,305);
outtext(string);
moveto(141,305);
outtext(string);
int x=getx( );
int y=305;
while(!kbhit( ))
{
settextstyle(2,0,7);
setcolor(12);
moveto(x+2,y);
outtext("_");
delay(250);
setcolor(0);
moveto(x+2,y);
outtext("_");
delay(200);
}
}
while(count<5);
if(count==5)
while(int(getch( ))!=13);
long element=atol(string);
clear_element_screen(NORMAL);
return element;
}
/**************************************************************************///----------------------------- Insert( ) ------------------------------///**************************************************************************/void Linked_list_Queue::Insert( )
{
long num=get_element( );
for(int count=1;count<5;count++)
{
setcolor(0);
setfillstyle(1,0);
pieslice(215,105,0,360,10);
delay(250);
setcolor(6);
setfillstyle(1,6);
pieslice(215,105,0,360,10);
delay(300);
}
if(inserted_element_count<15)
{
setcolor(10);
setfillstyle(1,10);
pieslice(245,105,0,360,10);
sound(1500);
delay(800);
nosound( );
setcolor(2);
setfillstyle(1,2);
pieslice(245,105,0,360,10);
}
if(inserted_element_count==15)
{
setcolor(12);
setfillstyle(1,12);
pieslice(275,105,0,360,10);
sound(2500);
delay(1000);
nosound( );
setcolor(4);
setfillstyle(1,4);
pieslice(275,105,0,360,10);
delay(200);
}
entry=new(node);
if(inserted_element_count==15)
{
show_output_screen(WARNING);
settextstyle(7,0,4);
setcolor(0);
outtextxy(25,277,"Error:");
outtextxy(26,277,"Error:");
setcolor(14);
outtextxy(27,275,"Error:");
outtextxy(28,275,"Error:");
while(!kbhit( ))
{
settextstyle(2,0,8);
setcolor(0);
outtextxy(46,309,"Not enough heap");
outtextxy(47,309,"Not enough heap");
outtextxy(28,335,"space on Screen.");
outtextxy(29,335,"space on Screen.");
setcolor(12);
outtextxy(48,308,"Not enough heap");
outtextxy(49,308,"Not enough heap");
outtextxy(50,308,"Not enough heap");
outtextxy(30,334,"space on Screen.");
outtextxy(31,334,"space on Screen.");
outtextxy(32,334,"space on Screen.");
delay(500);
setfillstyle(1,9);
bar(23,315,277,362);
delay(400);
}
getch( );
clear_element_screen(1);
}
elseif(rear==NULL)
{
entry->data=num;
entry->next=NULL;
rear=entry;
front=rear;
inserted_element_count++;
}
else
{
entry->data=num;
entry->next=NULL;
rear->next=entry;
rear=entry;
inserted_element_count++;
}
print_linked_list( );
}
/**************************************************************************///--------------------------- Delete( ) --------------------------------///**************************************************************************/void Linked_list_Queue::Delete( )
{
for(int count=1;count<5;count++)
{
setcolor(0);
setfillstyle(1,0);
pieslice(215,105,0,360,10);
delay(250);
setcolor(6);
setfillstyle(1,6);
pieslice(215,105,0,360,10);
delay(300);
}
if(inserted_element_count==0)
{
setcolor(12);
setfillstyle(1,12);
pieslice(275,105,0,360,10);
sound(2500);
delay(1000);
nosound( );
setcolor(4);
setfillstyle(1,4);
pieslice(275,105,0,360,10);
delay(200);
}
elseif(inserted_element_count>0)
{
setcolor(10);
setfillstyle(1,10);
pieslice(245,105,0,360,10);
sound(3000);
delay(800);
nosound( );
setcolor(2);
setfillstyle(1,2);
pieslice(245,105,0,360,10);
}
if(front==NULL)
{
show_output_screen(WARNING);
settextstyle(7,0,4);
setcolor(0);
outtextxy(25,277,"Error:");
outtextxy(26,277,"Error:");
setcolor(14);
outtextxy(27,275,"Error:");
outtextxy(28,275,"Error:");
while(!kbhit( ))
{
settextstyle(6,0,4);
setcolor(0);
outtextxy(48,306,"Nothing to Delete");
outtextxy(49,306,"Nothing to Delete");
setcolor(12);
outtextxy(50,305,"Nothing to Delete");
outtextxy(51,305,"Nothing to Delete");
outtextxy(52,305,"Nothing to Delete");
delay(500);
setfillstyle(1,9);
bar(23,315,277,350);
delay(400);
}
getch( );
}
else
{
long Deleted_element=front->data;
node *temp;
temp=front;
front=front->next;
inserted_element_count--;
delete (temp);
char element[6]={'\0'};
ltoa(Deleted_element,element,10);
show_element_screen(DELETE);
setcolor(12);
settextstyle(2,0,7);
outtextxy(140,305,element);
outtextxy(141,305,element);
delay(2500);
}
clear_element_screen(DELETE);
print_linked_list( );
}
/**************************************************************************///----------------------- print_linked_list( ) -------------------------///**************************************************************************/void Linked_list_Queue::print_linked_list( )
{
int count=0;
int x=340;
int y=100;
print=front;
setfillstyle(1,0);
bar(317,92,getmaxx( )-15,getmaxy( )-80);
while(print!=NULL)
{
setcolor(15);
setlinestyle(0,0,3);
rectangle(x,y,x+60,y+30);
char element[6]={'\0'};
ltoa(print->data,element,10);
if(count==0 || count==1 || count==2 || count==6 || count==7 ||
count==8 || count==12 || count==13 || count==14)
{
setfillstyle(1,9);
bar(x+1,y+1,x+44,y+29);
setfillstyle(1,1);
bar(x+46,y+1,x+59,y+29);
setcolor(15);
line(x+45,y,x+45,y+30);
setcolor(11);
settextstyle(0,0,1);
outtextxy(x+3,y+10,element);
if(count==inserted_element_count-1)
{
setcolor(15);
outtextxy(x+50,y+11,"x");
}
}
else
{
setfillstyle(1,9);
bar(x+16,y+1,x+59,y+29);
setfillstyle(1,1);
bar(x+1,y+1,x+14,y+29);
setcolor(15);
line(x+15,y,x+15,y+30);
setcolor(11);
settextstyle(0,0,1);
outtextxy(x+18,y+10,element);
if(count==inserted_element_count-1)
{
setcolor(15);
outtextxy(x+4,y+11,"x");
}
}
if(count==1 || count==2 || count==7 || count==8 || count==13
|| count==14)
{
setcolor(15);
line(x-45,y+15,x,y+15);
setfillstyle(1,15);
pieslice(x-47,y+15,0,360,2);
line(x-6,y+11,x-2,y+15);
line(x-6,y+19,x-2,y+15);
}
elseif(count==4 || count==5 || count==10 || count==11)
{
setcolor(15);
line(x+60,y+15,x+105,y+15);
setfillstyle(1,15);
pieslice(x+107,y+15,0,360,2);
line(x+66,y+11,x+62,y+15);
line(x+66,y+19,x+62,y+15);
}
elseif(count==3 || count==9)
{
setcolor(15);
setfillstyle(1,15);
pieslice(x+53,y-45,0,360,2);
setlinestyle(0,0,3);
line(x+55,y-45,x+75,y-45);
line(x+75,y-45,x+75,y+15);
line(x+60,y+15,x+75,y+15);
line(x+62,y+15,x+66,y+11);
line(x+62,y+15,x+66,y+19);
}
elseif(count==6 || count==12)
{
setcolor(15);
setfillstyle(1,15);
pieslice(x+7,y-45,0,360,2);
setlinestyle(0,0,3);
line(x-15,y-45,x+10,y-45);
line(x-15,y-45,x-15,y+15);
line(x-15,y+15,x,y+15);
line(x-2,y+15,x-6,y+11);
line(x-2,y+15,x-6,y+19);
}
setcolor(7);
setlinestyle(0,0,3);
line(350,125,350,138); /* Bottom Arrow */
line(346,134,350,138);
line(354,134,350,138);
setcolor(14);
settextstyle(2,0,4);
outtextxy(332,140,"Front");
if(count==inserted_element_count-1)
{
setcolor(7);
setlinestyle(0,0,3);
line(x+30,y+25,x+30,y+38);
line(x+26,y+34,x+30,y+38);
line(x+34,y+34,x+30,y+38);
setcolor(14);
settextstyle(2,0,4);
outtextxy(x+30,y+40,"Rear");
}
print=print->next;
count++;
if(count==0 || count==1 || count==2 || count==6 || count==7 ||
count==8 || count==12 || count==13 || count==14)
x+=100;
elseif(count==3 || count==4 || count==5 || count==9 ||
count==10 || count==11)
x-=100;
if(count==3 || count==9)
{
x=540;
y+=60;
}
elseif(count==6 || count==12)
{
x=340;
y+=60;
}
if(count==15)
break;
}
setlinestyle(0,0,0);
}
/**************************************************************************///------------------------ waiting_for_input( ) ------------------------///**************************************************************************/void Linked_list_Queue ::waiting_for_input( )
{
do
{
setfillstyle(1,4);
bar(51,440,99,445);
setfillstyle(1,10);
bar(101,440,149,445);
setfillstyle(1,1);
bar(151,440,199,445);
setfillstyle(1,14);
bar(201,440,249,445);
delay(300);
setfillpattern(fill_pattern,9);
bar(51,440,99,445);
delay(150);
bar(101,440,149,445);
delay(150);
bar(151,440,199,445);
delay(150);
bar(201,440,249,445);
delay(150);
setfillstyle(1,4);
bar(51,440,99,445);
delay(150);
setfillstyle(1,10);
bar(101,440,149,445);
delay(150);
setfillstyle(1,1);
bar(151,440,199,445);
delay(150);
setfillstyle(1,14);
bar(201,440,249,445);
}
while(!kbhit( ));
setfillpattern(fill_pattern,9);
bar(51,440,249,445);
}
/**************************************************************************///--------------------------- show_working( ) --------------------------///**************************************************************************/void Linked_list_Queue ::show_working( )
{
show_main_screen( );
delay(1000);
show_linked_list_screen( );
char ch;
do
{
waiting_for_input( );
ch=getch( );
switch(ch)
{
case'i': Insert( );
break;
case'I': Insert( );
break;
case'd': Delete( );
break;
case'D': Delete( );
break;
case'e': delay(500);
exit(0);
case'E': delay(500);
exit(0);
}
}
while(int(ch)!=27);
delay(500);
}
main( )
{
int driver=VGA;
int mode=VGAHI;
initgraph(&driver,&mode,"..\\Bgi");
Linked_list_Queue obj;
obj.show_working( );
closegraph( );
return 0;
}