48 lines
894 B
C
48 lines
894 B
C
#include "dqueue.h"
|
|
#include "dlist.h"
|
|
#include <stdlib.h>
|
|
|
|
dqueue dq_create(void)
|
|
{
|
|
dqueue q = (dqueue)malloc(sizeof(struct dqueued));
|
|
q -> head = dcons(NULL, NULL, NULL);
|
|
q -> tail = dcons(NULL, NULL, NULL);
|
|
q -> head -> next = q -> tail;
|
|
q -> tail -> prev = q -> head;
|
|
return q;
|
|
}
|
|
|
|
int dq_empty(dqueue q)
|
|
{
|
|
return q -> head -> next == q -> tail;
|
|
}
|
|
|
|
void dq_destory(dqueue q)
|
|
{
|
|
while(!dq_empty(q))
|
|
dq_deq_back(q);
|
|
}
|
|
|
|
void dq_enq_front(dqueue q, void *element)
|
|
{
|
|
create_and_link(element, q -> head, q -> head -> next);
|
|
}
|
|
|
|
void dq_enq_back(dqueue q, void *element)
|
|
{
|
|
create_and_link(element, q -> tail -> prev, q -> tail);
|
|
}
|
|
|
|
void * dq_deq_front(dqueue q)
|
|
{
|
|
//assert(!empty(q));
|
|
return unlink_and_free(q -> head -> next);
|
|
}
|
|
|
|
void * dq_deq_back(dqueue q)
|
|
{
|
|
//assert(!empty(q));
|
|
return unlink_and_free(q -> tail -> prev);
|
|
}
|
|
|