Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I need help with the folling C program, I\'m working with void* (is this conside

ID: 3884138 • Letter: I

Question

I need help with the folling C program, I'm working with void* (is this considered working with threads?) and I keep getting the error for the casting issue from int to void*.

How can I fix this issue and print out the info from my queue?

#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

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_;

};

/*

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);

int 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 queue_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, "<empty> "); } }

int 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->data_ = 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();

  

int i;

  

  

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

  

queue_print(q);

queue_pop_front(q);

queue_print(q);

  

queue_delete(q);

  

  

  

return 0;

}

//END

Explanation / Answer

#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

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_;

};

/*

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);

int 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 queue_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, "<empty> "); } }

int 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->data_ = 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();

  

int i;

  

  

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

  

queue_print(q);

queue_pop_front(q);

queue_print(q);

  

queue_delete(q);

  

  

  

return 0;

}

#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

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_;

};

/*

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);

int 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 queue_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, "<empty> "); } }

int 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->data_ = 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();

  

int i;

  

  

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

  

queue_print(q);

queue_pop_front(q);

queue_print(q);

  

queue_delete(q);

  

  

  

return 0;

}