Here is one way to write it.
typedef int QDequeMemberType; struct QDequeCell { QDequeMemberType item; QDequeCell* next; QDequeCell(QDequeMemberType i, QDequeCell* n) { item = i; next = n; } }; struct QDeque { QDequeCell* front; QDequeCell* back; QDeque() { front = NULL; back = NULL; } }; bool isEmpty(QDeque& d) { return (d.front == NULL); } void insertAtFront(QDeque& d, QDequeMemberType x) { if(d.front == NULL) { d.front = d.back = new QDequeCell(x, NULL); } else { d.front = new QDequeCell(x, d.front); } } void insertAtBack(QDeque& d, QDequeMemberType x) { if(d.front == NULL) { d.front = d.back = new QDequeCell(x, NULL); } else { QDequeCell* p = new QDequeCell(x, NULL); d.back-> next = p; d.back = p; } } void removeFromFront(QDeque& d, QDequeMemberType& x) { if(d.front != NULL) { x = d.front->item; QDequeCell* p = d.front; d.front = d.front->next; delete p; if(d.front == NULL) d.back = NULL; } }