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

Complete the definitions for the stack_*() functions so that main() prints the r

ID: 3724955 • Letter: C

Question

Complete the definitions for the stack_*() functions so that main() prints the reverse of its command line.

#include <assert.h>

#include <stdio.h>

#include <stdlib.h>

#include <string,h>

struct stack {

struct stack_element *top;

int element_count;

}

struct stack_element {

unsinged char c;

struct stack_element *next;

}

struct stack *stack_create(void){

struct stack *s = malloc(sizeof(struct stack));

if(s==NULL){

fprintf(stderr, "%s:%d: malloc() returned NULL ", _FILE_, _LINE_);

exit(EXIT_FAILURE);

}

// INSERT CODE HERE

return s;

}

void stack_destroy(struct stack *s)

{

assert(s != NULL);

// INSERT CODE HERE

}

void stack_push(struct stack *s, unsigned char c){

assert (s != NULL);

// INSERT CODE HERE

}

int stack_pop(struct stack *s){

assert(s != NULL);

unsigned char c;

// INSERT CODE HERE

return c;

}

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

struct stack *s = stack_create();

for (int i = argc - 1; i > 0; i--){

char *arg = argv[i];

for(size_t j = 0; j < strlen(arg); j++){

stack_push(s,arg[j]);

}

char c;

while ((c = stackpop(s)) != EOF){

printf("%c",c);

}

print f(" ");

}

printf(" ");

stack_destroy(s);

return EXIT_SUCCESS;

}

Explanation / Answer

#include <assert.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct stack

{

struct stack_element *top;

int element_count;

};

struct stack_element

{

unsigned char c;

struct stack_element *next;

};

struct stack *stack_create(void)

{

struct stack *s = malloc(sizeof(struct stack));

if (s == NULL)

{

//fprintf(stderr, "%s:%d: malloc() returned NULL ", _FILE_, _LINE_);

exit(EXIT_FAILURE);

}

s->top = NULL;

s->element_count = 0;

// INSERT CODE HERE

return s;

}

void stack_destroy(struct stack *s)

{

assert(s != NULL);

// INSERT CODE HERE

struct stack_element *temp = s->top, *prev;

while(temp!=NULL){

prev = temp;

temp = temp->next;

free(prev);

}

s->element_count = 0;

}

void stack_push(struct stack *s, unsigned char c)

{

assert(s != NULL);

// INSERT CODE HERE

struct stack_element *node = (struct stack_element*)malloc(sizeof(struct stack_element));

node->c = c;

if(s->top==NULL){

node->next = NULL;

s->top = node;

}

else{

node->next = s->top;

s->top = node;

}

s->element_count++;

}

int stack_pop(struct stack *s)

{

assert(s != NULL);

unsigned char c;

// // INSERT CODE HERE

struct stack_element *temp = s->top;

if(s->top==NULL)

return 0;

else{

c = temp->c;

free(s->top);

s->top = temp->next;

s->element_count--;

return c;

}

}

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

{

struct stack *s = stack_create();

int i;

for (i = argc - 1; i > 0; i--)

{

char *arg = argv[i];

size_t j;

for (j = 0; j < strlen(arg); j++)

{

stack_push(s, arg[j]);

}

char c;

while ((c = stack_pop(s)) != 0)

{

printf("%c", c);

}

printf(" ");

}

printf(" ");

stack_destroy(s);

return EXIT_SUCCESS;

}