All of the Stack parameters for the functions in lab4c.c are pointers to the Stack structure.

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter18: Stacks And Queues
Section: Chapter Questions
Problem 1TF
icon
Related questions
Question
100%

given code

#include <stdio.h>
#include <stdlib.h>

/* typical C boolean set-up */
#define TRUE 1
#define FALSE 0

typedef struct StackStruct
{
int* darr; /* pointer to dynamic array */
int size; /* amount of space allocated */
int inUse; /* top of stack indicator
- counts how many values are on the stack */
} Stack;

void init (Stack* s)
{
s->size = 2;
s->darr = (int*) malloc ( sizeof (int) * s->size );
s->inUse = 0;
}

void push (Stack* s, int val)
{
/* QUESTION 7 */
/* check if enough space currently on stack and grow if needed */

/* add val onto stack */
s->darr[s->inUse] = val;
s->inUse = s->inUse + 1;
}

int isEmpty (Stack* s)
{
if ( s->inUse == 0)
return TRUE;
else
return FALSE;
}


int top (Stack* s)
{
return ( s->darr[s->inUse-1] );
}

/* QUESTION 9.1 */
void pop (Stack* s)
{
if (isEmpty(s) == FALSE)
s->inUse = s->inUse - 1;
}

void reset (Stack* s)
{
/* Question 10: how to make the stack empty? */

}

int main (int argc, char** argv)
{
Stack st1;

init (&st1);

push (&st1, 20);
push (&st1, 30);
push (&st1, 40);
push (&st1, 50);

while ( isEmpty(&st1) == FALSE)
{
int value = top (&st1);
printf ("The top value on the stack is %d\n", value);

/* QUESTION 9.2 */
pop (&st1);
}

printf ("The stack is now empty\n");
}

Q8
All of the Stack parameters for the functions in lab4c.c are pointers to the Stack structure.
Q8.1
Could any of the functions have been written so that the parameter containing the stack could
have used an instance of the Stack structure instead of a pointer (don't change the return type
to answer this question)?
O Yes, at least one of the stack functions could have the stack parameter be an instance to the
Stack structure.
O No, all of the stack functions need the stack parameter to be a pointer to the Stack structure.
Q8.2
If so, which functions could have been written in this manner?
Q8.3
Explain why your answers to Questions 8.1 and 8.2 are correct.
Transcribed Image Text:Q8 All of the Stack parameters for the functions in lab4c.c are pointers to the Stack structure. Q8.1 Could any of the functions have been written so that the parameter containing the stack could have used an instance of the Stack structure instead of a pointer (don't change the return type to answer this question)? O Yes, at least one of the stack functions could have the stack parameter be an instance to the Stack structure. O No, all of the stack functions need the stack parameter to be a pointer to the Stack structure. Q8.2 If so, which functions could have been written in this manner? Q8.3 Explain why your answers to Questions 8.1 and 8.2 are correct.
Expert Solution
Step 1
#include <stdio.h>
#include <stdlib.h>

/* typical C boolean set-up */
#define TRUE 1
#define FALSE 0

typedef struct StackStruct
{
 int*    darr;  /* pointer to dynamic array  */
 int     size;  /* amount of space allocated */
 int     inUse; /* top of stack indicator 
                   - counts how many values are on the stack   */
} Stack;

void init (Stack* s)
{
 s->size = 2;
 s->darr = (int*) malloc ( sizeof (int) * s->size );
 s->inUse  = 0;
}

void push (Stack* s, int val)
{
  /* QUESTION 7 */
  /* check if enough space currently on stack and grow if needed */
  if(s->inUse+1 >= s->size){ //If whole array is inn use i.e inUse +1 = size
      s->size=s->size*2; //Increase the size to 2 times the current
       //Using realloc to resize the size of array, it automatically retains previous elemnts
      s->darr = (int *)realloc(s->darr,(s->size)*sizeof(int));
  }
  
  /* add val onto stack */
  s->darr[s->inUse] = val;
  s->inUse = s->inUse + 1;
}

int isEmpty (Stack* s)
{
  if ( s->inUse == 0)
    return TRUE;
  else
    return FALSE;
}


int top (Stack* s)
{
  return (  s->darr[s->inUse-1] );
}

/* QUESTION 9 */
void pop (Stack* s)
{
  s->inUse = s->inUse - 1;
}

void reset (Stack* s)
{
    s->size=2;
    free(s->darr);
    s->darr = (int*) malloc ( sizeof (int) * s->size );
    s->inUse  = 0;

}

int main (int argc, char** argv)
{
 Stack st1;

 init (&st1);

 push (&st1, 20);
 push (&st1, 30);
 push (&st1, 40);
 push (&st1, 50);
  
 while ( isEmpty(&st1) == FALSE)
   {
    int value = top (&st1);
    printf ("The top value on the stack is %d\n", value);
    
    /* QUESTION 10 */
    pop (&st1);
   }

 printf ("The stack is now empty\n");
}
steps

Step by step

Solved in 2 steps

Blurred answer
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning