Question: I need help with the following C program. My delete funtion is not working properly, it should delete the queue. Also I need to include

I need help with the following C program. My delete funtion is not working properly, it should delete the queue. Also I need to include a function called remove_all, that removes all the nodes from the queue.

#include

#include

#include

typedef struct queueNode queueNode;

typedef struct queue queue;

struct queueNode{

void* data_;

queueNode* next_;

};

queueNode* queueNode_create(void* data);

queueNode* queueNode_create_next(void* data, queueNode* next);

queueNode* queueNode_create(void* data){

return queueNode_create_next(data, NULL);

}

queueNode* queueNode_create_next(void* data, queueNode* next){

queueNode* p = (queueNode*)malloc(sizeof(queueNode));

p->data_ = data;

p->next_ = next;

return p;

}

void queueNode_print(queueNode* q){ printf("Data: %p Next: %p ", q->data_, q->next_); }

struct queue{

queueNode* head_;

int numItems_;

};

/*

queue functions:

create

empty

check_empty

size

front

back

pop_front

push_back

print

delete

*/

queue* queue_create();

bool queue_empty(queue* q);

void queue_check_empty(queue* q);

size_t queue_size(queue* q);

void* queue_front(queue* q);

void* queue_back(queue* q);

void queue_pop_front(queue* q);

void queue_push_back(queue* q, void* data);

void queue_print(queue* q);

void queueu_delete(queue* q);

queue* queue_create(){

queue* q = (queue*)malloc(sizeof(queue));

q->head_ = NULL;

q->numItems_ = 0;

return q;

}

bool queue_empty(queue* q){ return q->numItems_ == 0; }

void queue_check_empty(queue* q){ if(queue_empty(q)) { fprintf(stderr, "I'm sorry, the queue is empty "); } }

size_t queue_size(queue* q){ return q->numItems_; }

void* queue_front(queue* q){

queue_check_empty(q);

return q->head_;

}

void* queue_back(queue* q){

queue_check_empty(q);

queueNode* temp = q->head_;

while(temp->next_ != NULL){

temp = temp->next_;

}

return temp;

}

void queue_pop_front(queue* q){

queue_check_empty(q);

q->head_ = q->head_->next_;

--q->numItems_;

}

void queue_push_back(queue* q, void* data){

queueNode* node = queueNode_create(data);

if(queue_size(q) == 0){

q->head_ = node;

}

else{

queueNode* temp = q->head_;

while(temp->next_ != NULL){

temp = temp->next_;

}

temp->next_ = node;

}

++q->numItems_;

}

void queue_print(queue* q){

queue_check_empty(q);

queueNode* temp = q->head_;

while(temp->next_ != NULL){

queueNode_print(temp);

temp = temp->next_;

}

}

void queue_delete(queue* q){

free(q);

}

int main(int argc, const char * argv[]){

queue* q = queue_create();

long i;

for(i=0; i<=5; ++i){ queue_push_back(q, (void*)(i*2)); }

printf("original queue before pop: ");

queue_print(q);

queue_pop_front(q);

printf("queue after pop: ");

queue_print(q);

queue_pop_front(q);

printf("queue after pop: ");

queue_print(q);

queue_pop_front(q);

printf("queue after pop: ");

queue_print(q);

queue_delete(q);

printf("queue after delete: ");

queue_print(q);

return 0;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!