//Program to reverse queue but in O(n) and O(1) space
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#define MAX 7
int Q[ MAX] ;
int f = - 1 , r = - 1 ;
void display( ) ;
int rev( ) ;
int isempty( ) ;
int isfull( ) ;
int enq( int d) ;
int deq( ) ;
int main( )
{
int i;
for ( i= 1 ; i<= MAX; i++ )
enq( i) ;
display( ) ;
rev( ) ;
display( ) ;
getch( ) ;
return 0 ;
}
int rev( )
{
if ( ! isempty( ) ) //if not empty
{
int temp = deq( ) ;
rev( ) ;
enq( temp) ;
}
else return 0 ;
}
void display( )
{
int i;
cout << "\n " ;
for ( i= f; i<= r; i++ )
cout << " " << Q[ i] ;
}
int isempty( )
{
if ( ( f== - 1 && r== - 1 ) )
return 1 ;
else
return 0 ;
}
int isfull( )
{
if ( f== r+ 1 || ( f== 0 && r== MAX- 1 ) )
return 1 ;
else
return 0 ;
}
int enq( int d)
{
if ( isfull( ) )
{
cout << "\n Cannot insert already full - " ;
return 0 ;
}
//decide new position of r
if ( f== r && r== - 1 )
{ r= 0 ; f= 0 ; } //only 1 element
else if ( r== MAX- 1 )
r= 0 ;
else
r= r+ 1 ;
Q[ r] = d;
return 1 ;
}
int deq( )
{
if ( isempty( ) )
{
cout << "\n Already empty - " ;
return 0 ;
}
int temp = Q[ f] ;
//now decide new postion of f
if ( f== r) //only one element was der
{
f = r = - 1 ; //empty the queue
}
else if ( f== MAX- 1 )
f= 0 ;
else
f+ = 1 ; //increment front
return temp;
}
Ly9Qcm9ncmFtIHRvIHJldmVyc2UgIHF1ZXVlIGJ1dCBpbiBPKG4pIGFuZCBPKDEpIHNwYWNlCgojaW5jbHVkZTxjb25pby5oPgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxpb3N0cmVhbS5oPgojZGVmaW5lIE1BWCA3CmludCBRW01BWF07CmludCBmID0gLTEsIHIgPSAtMTsKdm9pZCBkaXNwbGF5KCk7CmludCByZXYoKTsKaW50IGlzZW1wdHkoKTsKaW50IGlzZnVsbCgpOwppbnQgZW5xKGludCBkKTsKaW50IGRlcSgpOwppbnQgbWFpbigpCnsKCWludCBpOwoJZm9yKGk9MTtpPD1NQVg7aSsrKQoJZW5xKGkpOwoJZGlzcGxheSgpOwoJcmV2KCk7CglkaXNwbGF5KCk7CgkKCmdldGNoKCk7CnJldHVybiAwOwp9CmludCByZXYoKQp7CglpZighaXNlbXB0eSgpKSAvL2lmIG5vdCBlbXB0eQoJewoJCWludCB0ZW1wID0gZGVxKCk7CgkJcmV2KCk7CgkJZW5xKHRlbXApOwoJfQplbHNlIHJldHVybiAwOwoKfQp2b2lkIGRpc3BsYXkoKQp7CglpbnQgaTsKCWNvdXQ8PCJcbiI7Cglmb3IoaT1mO2k8PXI7aSsrKQoJY291dDw8IiAgIjw8UVtpXTsKCn0KaW50IGlzZW1wdHkoKQp7CglpZigoZj09LTEgJiYgcj09LTEpKSAKCXJldHVybiAxOwoJZWxzZSAKCXJldHVybiAwOwoKfQppbnQgaXNmdWxsKCkKewoJaWYoZj09cisxIHx8IChmPT0wICYmIHI9PU1BWC0xKSkKCXJldHVybiAxOwoJZWxzZQoJcmV0dXJuIDA7Cgp9CmludCBlbnEoaW50IGQpCnsKCWlmKGlzZnVsbCgpKQoJewoJCWNvdXQ8PCJcbiBDYW5ub3QgaW5zZXJ0IGFscmVhZHkgZnVsbCAtICI7CgkJcmV0dXJuIDA7Cgl9CgkvL2RlY2lkZSBuZXcgcG9zaXRpb24gb2YgcgoJaWYoZj09ciAmJiByPT0tMSkKCXtyPTA7Zj0wO30gLy9vbmx5IDEgZWxlbWVudAoJZWxzZSBpZihyPT1NQVgtMSkKCXI9MDsKCWVsc2UKCXI9cisxOwoJUVtyXSA9IGQ7CnJldHVybiAxOwoKfQppbnQgZGVxKCkKewoJaWYoaXNlbXB0eSgpKQoJewoJY291dDw8IlxuIEFscmVhZHkgZW1wdHkgLSAiOwoJcmV0dXJuIDA7Cgl9CglpbnQgdGVtcCA9IFFbZl07CgkvL25vdyBkZWNpZGUgbmV3IHBvc3Rpb24gb2YgZgoJaWYoZj09cikgLy9vbmx5IG9uZSBlbGVtZW50IHdhcyBkZXIKCXsKCQlmID0gciA9IC0xOyAvL2VtcHR5IHRoZSBxdWV1ZQoJfQoJZWxzZSBpZiAoZj09TUFYLTEpCglmPTA7CgllbHNlCglmKz0xOyAvL2luY3JlbWVudCBmcm9udAoKcmV0dXJuIHRlbXA7Cn0K