#include "dqueue.h" #include "dlist.h" #include 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); }