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
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
Get step-by-step solutions from verified subject matter experts
