A car garage simulation using de-queue (link list implementation)


Joined
Jul 22, 2011
Messages
3
Reaction score
0
compiler finding 5 errors in this code please someone remove errors for me or help me...


#include < stdio.h >
#include < conio.h >
#include < alloc.h >
#include < string.h >

#define TOP 1
#define BOT 2

struct node
{
char plate [15] ;
struct node *link ;
} *front[5], *rear[5] ;

char plate[15], temp[15] ;
int i ;

void add_dq ( struct node**, struct node**, int, char* ) ;
char* del_dq ( struct node**, struct node**, int ) ;
void push ( struct node**, char* ) ;
char* pop ( struct node** ) ;
void q_display ( struct node * ) ;

void main( )
{
char ad ;
int s, lane = -1, min, lc ;

clrscr( );
while ( 1 )
{
for ( i = 0 ; i < 5 ; i++ )
{
printf( "lane %d: ", i ) ;
q_display ( front ) ;
}

printf( "\nArrival/Departure/Quit? ( A/D/Q ): " ) ;
ad = getch( ) ;

if ( toupper ( ad ) == 'Q' )
exit ( 1 ) ;

printf ( "\nEnter license plate num:" ) ;
gets ( plate ) ;
ad = toupper ( ad ) ;

if ( ad == 'A' ) /* arrival of car */
{
lane = -1 ; /* assume no lane is available */
min = 10 ;
for ( i = 0 ; i < 5 ; i++ )
{
s = count ( front ) ;
if ( s < min )
{
min = s ;
lane = i ;
}
}

if ( lane == -1 )
printf ( "\nNo room available" ) ;
else
{
add_dq ( &front[ lane ], &rear[ lane ], BOT, plate ) ;
printf ( "\npark car at lane %d slot %d\n", lane, s ) ;
}
}
else
{
if ( ad == 'D' ) /* departure of car */
{
for ( i = 0 ; i < 5 ; ++i )
{
s = search ( front, plate ) ;
if ( s != -1 )
{
lane = i ;
break ;
}
}
if ( i == 5 )
printf ( "\nno such car!!\n" ) ;
else
{
printf ( "\ncar found at lane %d slot %d\n", lane, s ) ;
del_dq ( &front[ lane ], &rear[ lane ], s ) ;
}
}
else
if ( ad == 'Q' )
exit ( 1 ) ;
}
}
}

/* adds a new element at the end of queue */
void add_dq ( struct node **f, struct node **r, int tb, char *p )
{
struct node *q ;
/* create new node */
q = ( struct node * ) malloc ( sizeof ( struct node ) ) ;
strcpy ( q -> plate, p ) ;
q -> link = NULL ;

/* if the queue is empty */
if ( *f == NULL )
*f = q ;
else
{
if ( tb == BOT )
( *r ) -> link = q ;
else
{
q -> link = *f ;
*f = q ;
return ;
}
}
*r = q ;
}

char* del_dq ( struct node **f, struct node **r, int n )
{
struct node *q, *top = NULL ;
/* if queue is empty */
if ( *f == NULL )
printf ( "queue is empty" ) ;
else
{
if ( n == 0 )
{
strcpy ( temp, ( *f ) -> plate ) ;
q = *f ;
*f = ( *f ) -> link ;
free ( q ) ;
return temp ;
}

/* locate node */
for ( i = 0 ; i < n ; i++ )
{
/* drive out cars */
push ( &top, ( *f ) -> plate ) ;

/* delete the node */
q = *f ;
*f = q -> link ;
free ( q ) ;
}

/* delete the nth node */
q = *f ;
*f = q -> link ;
free ( q ) ;

for ( i = 0 ; i < n ; i++ )
{
strcpy ( temp, pop ( &top ) ) ;

/* add the node */
add_dq ( f, r, TOP, temp ) ;
}
}
}

int count ( struct node *q )
{
int c = 0 ;

/* traverse the entire linked list */
while ( q!= NULL )
{
q = q -> link ;
c++ ;
}
return c ;
}

int search ( struct node *q, char *p )
{
int s = -1, c = 0 ;

while ( q != NULL )
{
if ( strcmp ( p, q -> plate ) == 0 )
{
s = c ;
break ;
}
else
{
q = q -> link ;
c++ ;
}
}
return ( s ) ;
}

/* adds a new element to the top of stack */
void push ( struct node **s, char* item )
{
struct node *q ;
q = ( struct node* ) malloc ( sizeof ( struct node ) ) ;
strcpy ( q -> plate, item ) ;
q -> link = *s ;
*s = q ;
}

/* removes an element from top of stack */
char* pop ( struct node **s )
{
struct node *q ;

/* if stack is empty */
if ( *s == NULL )
{
return NULL ;
}
else
{
q = *s ;
strcpy ( temp, q -> plate ) ;
*s = q -> link ;
free ( q ) ;
return ( temp ) ;
}
}

void q_display ( struct node *q )
{
while( q != NULL )
{
printf ( "%s", q -> plate ) ;
q = q -> link ;
}
printf ( "\n" ) ;
}
 
Last edited:
Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top