Program On Deque That Implements A Linked List

August 31, 2010

Linked Lists

A deque is a data structure that allows both deletion as well as insertion of elements to be done at both ends. Here’s a handy C program to implement deque using linked list.


Here’s an Program on deque that implements a linked list.

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

struct node

{
int data ;

struct node *link ;

} ;

struct dqueue

{
struct node *front ;

struct node *rear ;
} ;

void initdqueue ( struct dqueue * ) ;

void addqatend ( struct dqueue *, int item ) ;

void addqatbeg ( struct dqueue *, int item ) ;

int delqatbeg ( struct dqueue * ) ;

int delqatend ( struct dqueue * ) ;

void display ( struct dqueue ) ;

int count ( struct dqueue ) ;

void deldqueue ( struct dqueue * ) ;

void main( )
{
struct dqueue dq ;

int i, n ;

clrscr( ) ;

initdqueue ( &dq ) ;

addqatend ( &dq, 11 ) ;

addqatbeg ( &dq, 10 ) ;

addqatend ( &dq, 12 ) ;

addqatbeg ( &dq, 9 ) ;

addqatend ( &dq, 13 ) ;

addqatbeg ( &dq, 8 ) ;

addqatend ( &dq, 14 ) ;

addqatbeg ( &dq, 7 ) ;

display ( dq ) ;

n = count ( dq ) ;

printf ( “\nTotal elements: %d”, n ) ;

i = delqatbeg ( &dq ) ;

printf ( “\nItem extracted = %d”, i ) ;

i = delqatbeg ( &dq ) ;

printf ( “\nItem extracted = %d”, i ) ;

i = delqatbeg ( &dq ) ;

printf ( “\nItem extracted = %d”, i ) ;

i = delqatend ( &dq ) ;

printf ( “\nItem extracted = %d”, i ) ;

display ( dq ) ;

n = count ( dq ) ;

printf ( “\nElements Left: %d”, n ) ;

deldqueue ( &dq ) ;

getch( ) ;
}

/* initializes elements of structure */

void initdqueue ( struct dqueue *p )
{
p – > front = p – > rear = NULL ;
}

/* adds item at the end of dqueue */

void addqatend ( struct dqueue *p, int item )
{
struct node *temp ;

temp = ( struct node * ) malloc ( sizeof ( struct node ) );

temp – > data = item ;

temp – > link = NULL ;

if ( p – > front == NULL )

p – > front = temp ;

else

p – > rear – > link = temp ;

p – > rear = temp ;
}

/* adds item at begining of dqueue */

void addqatbeg ( struct dqueue *p, int item )
{
struct node *temp ;

int *q ;

temp = ( struct node * ) malloc ( sizeof ( struct node ) );

temp – > data = item ;

temp – > link = NULL ;

if ( p – > front == NULL )

p – > front = p – > rear = temp ;

else

{

temp – > link = p – > front ;

p – > front = temp ;
}
}
/* deletes item from begining of dqueue */

int delqatbeg ( struct dqueue *p )
{
struct node *temp = p – > front ;

int item ;

if ( temp == NULL )

{

printf ( “\nQueue is empty.” ) ;

return 0 ;
}

else

{
temp = p – > front ;

item = temp – > data ;

p – > front = temp – > link ;

free ( temp ) ;

if ( temp == NULL )

p – > rear = NULL ;

return ( item ) ;
}
}

/* deletes item from end of dqueue */

int delqatend ( struct dqueue *p )
{
struct node *temp , *rleft, *q ;

int item ;

temp = p – > front ;

if ( p – > rear == NULL )

{
printf ( “\nQueue is empty.” ) ;

return 0 ;
}

else

{
while ( temp != p – > rear )

{
rleft = temp ;

temp = temp – > link ;
}
q = p – > rear ;

item = q – > data ;

free ( q ) ;

p – > rear = rleft ;

p – > rear – > link = NULL ;

if ( p – > rear == NULL )

p – > front = NULL ;

return ( item ) ;
}
}
/* displays the queue */

void display ( struct dqueue dq )
{
struct node *temp = dq.front ;

printf ( “\nfront – > ” ) ;

while ( temp != NULL )
{
if ( temp – > link == NULL )
{
printf ( “\t%d”, temp – > data ) ;

printf ( ” < - rear" ) ;
}
else
printf ( "\t%d", temp - > data ) ;

temp = temp – > link ;
}
printf ( “\n” ) ;
}

/* counts the number of items in dqueue */

int count ( struct dqueue dq )
{
int c = 0 ;
struct node *temp = dq.front ;

while ( temp != NULL )
{
temp = temp – > link ;
c++ ;
}

return c ;
}

/* deletes the queue */

void deldqueue ( struct dqueue *p )
{
struct node *temp ;

if ( p – > front == NULL )
return ;

while ( p – > front != NULL )
{
temp = p – > front ;
p – > front = p – > front – > link ;
free ( temp ) ;
}
}

Subscribe

Subscribe to our e-mail newsletter to receive updates.

No comments yet.

Leave a Reply