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;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.