Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

In the following C program, I want to know how to print out the data values of the nodes, NOT the address as is currently

In the following C program, I want to know how to print out the data values of the nodes, NOT the address as is currently the case.

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

};

/*

create

empty

check_empty

size

front

back

push_back

pop_front

delete

print

*/

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_push_back(queue* q,void* data);

void queue_pop_front(queue* q);

void queue_print(queue* q);

void queue_delete(queue* q);

queue* queue_create()

{

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

q->numitems_ = 0;

q->head_ = NULL;

return q;

}

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

void queue_check_empty(queue* q) { if (queue_empty(q)) { fprintf(stderr, " "); } }

int queue_size(queue* q) { return q->numitems_; } //he put returns size_t

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_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_pop_front(queue* q)

{

queue_check_empty(q); //no need to check if empty

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

//--q->numitems_;

}

void queue_print(queue* q)

{

queue_check_empty(q);

queueNode* temp = q->head_;

while(temp->next_ != NULL)

{

queueNode_print(temp);

//printf("[%p, %p],", q->data, q->next);

//printf("%p ", *front);

temp = temp->next_;

}

}

void queue_delete(queue* q)

{

//while(!q->empty()) { qu->pop(); } add this!

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

printf("Before Pop ");

queue_print(q);

queue_pop_front(q);

printf("After Pop1 ");

queue_print(q);

queue_pop_front(q);

printf("After Pop2 ");

queue_print(q);

queue_pop_front(q);

queue_pop_front(q);

queue_pop_front(q);

printf("After Pop3 ");

queue_print(q);

queue_delete(q);

//for (i = 0; i < 10; ++i) { }

return 0;

}

//END

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

More Books

Students also viewed these Databases questions

Question

In an Excel Pivot Table, how is a Fact/Measure Column repeated?

Answered: 1 week ago