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

Please fill out the skeleton code below(in bold). The prompt and header file are

ID: 3913758 • Letter: P

Question

Please fill out the skeleton code below(in bold). The prompt and header file are also below.

/* stack.c: Stack application. */

#include

#include

#include

#include "dynArray.h"

/* ***************************************************************

Using stack to check for unbalanced parentheses.

***************************************************************** */

/* Returns the next character of the string, once reaches end return '0' (zero)

param: s pointer to a string

pre: s is not null

*/

char nextChar(char* s)

{

static int i = -1;

char c;

++i;

c = *(s+i);

if ( c == '' )

return '';

else

return c;

}

/* Checks whether the (), {}, and [] are balanced or not

param: s pointer to a string

pre: s is not null

post:

*/

int isBalanced(char* s)

{

/* FIXME: You will write this function */

return 0;

}

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

char* s=argv[1];

int res;

res = isBalanced(s);

if (res)

printf("The string %s is balanced ",s);

else

printf("The string %s is not balanced ",s);

return 0;

}

/* dynamicArray_a1.h : Dynamic Array implementation. */

#ifndef DYNAMIC_ARRAY_INCLUDED

#define DYNAMIC_ARRAY_INCLUDED 1

#ifndef __TYPE

#define __TYPE

# define TYPE char

# define TYPE_SIZE sizeof(int)

# endif

# ifndef LT

# define LT(A, B) ((A) < (B))

# endif

# ifndef EQ

# define EQ(A, B) ((A) == (B))

# endif

typedef struct DynArr DynArr;

/* Dynamic Array Functions */

void initDynArr(DynArr *v, int capacity);

DynArr *newDynArr(int cap);

void freeDynArr(DynArr *v);

void deleteDynArr(DynArr *v);

int sizeDynArr(DynArr *v);

void addDynArr(DynArr *v, TYPE val);

TYPE getDynArr(DynArr *v, int pos);

void putDynArr(DynArr *v, int pos, TYPE val);

void swapDynArr(DynArr *v, int i, int j);

void removeAtDynArr(DynArr *v, int idx);

/* Stack interface. */

int isEmptyDynArr(DynArr *v);

void pushDynArr(DynArr *v, TYPE val);

TYPE topDynArr(DynArr *v);

void popDynArr(DynArr *v);

/* Bag Interface */

/* Note addDynArr is already declared above*/

int containsDynArr(DynArr *v, TYPE val);

void removeDynArr(DynArr *v, TYPE val);

#endif

*********************************************************************************************************************************

#include

#include

#include "dynArray.h"

struct DynArr

{

TYPE *data; /* pointer to the data array */

int size; /* Number of elements in the array */

int capacity; /* capacity ofthe array */

};

/* ************************************************************************

Dynamic Array Functions

************************************************************************ */

/* Initialize (including allocation of data array) dynamic array.

param: v pointer to the dynamic array

param: cap capacity of the dynamic array

pre: v is not null

post: internal data array can hold cap elements

post: v->data is not null

*/

void initDynArr(DynArr *v, int capacity)

{

assert(capacity > 0);

assert(v!= 0);

v->data = (TYPE *) malloc(sizeof(TYPE) * capacity);

assert(v->data != 0);

v->size = 0;

v->capacity = capacity;

}

/* Allocate and initialize dynamic array.

param: cap desired capacity for the dyn array

pre: none

post: none

ret: a non-null pointer to a dynArr of cap capacity

and 0 elements in it.

*/

DynArr* newDynArr(int cap)

{

assert(cap > 0);

DynArr *r = (DynArr *)malloc(sizeof( DynArr));

assert(r != 0);

initDynArr(r,cap);

return r;

}

/* Deallocate data array in dynamic array.

param: v pointer to the dynamic array

pre: none

post: d.data points to null

post: size and capacity are 0

post: the memory used by v->data is freed

*/

void freeDynArr(DynArr *v)

{

if(v->data != 0)

{

free(v->data); /* free the space on the heap */

v->data = 0; /* make it point to null */

}

v->size = 0;

v->capacity = 0;

}

/* Deallocate data array and the dynamic array ure.

param: v pointer to the dynamic array

pre: none

post: the memory used by v->data is freed

post: the memory used by d is freed

*/

void deleteDynArr(DynArr *v)

{

freeDynArr(v);

free(v);

}

/* Resizes the underlying array to be the size cap

param: v pointer to the dynamic array

param: cap the new desired capacity

pre: v is not null

post: v has capacity newCap

*/

void _dynArrSetCapacity(DynArr *v, int newCap)

{

TYPE *temp = malloc(TYPE_SIZE * newCap);

int i;

/* FIXME: You will write this function */

assert(v != 0);

//copy the values into new array

for(i = 0; i < sizeDynArr(v); i++)

temp[i] = v->data[i];

  

free(v->data); // free old memory

v->data = temp; //update the array to point to new allocated memory

v->capacity = newCap; //update capacity

  

  

}

/* Get the size of the dynamic array

param: v pointer to the dynamic array

pre: v is not null

post: none

ret: the size of the dynamic array

*/

int sizeDynArr(DynArr *v)

{

return v->size;

}

/* Adds an element to the end of the dynamic array

param: v pointer to the dynamic array

param: val the value to add to the end of the dynamic array

pre: the dynArry is not null

post: size increases by 1

post: if reached capacity, capacity is doubled

post: val is in the last utilized position in the array

*/

void addDynArr(DynArr *v, TYPE val)

{

  

/* FIXME: You will write this function */

assert(v != 0);

if(sizeDynArr(v) == v->capacity) //if no more space, increase capacity to double of its value

{

_dynArrSetCapacity(v, 2 * v->capacity);

}

v->data[v->size] = val;

v->size++;

  

}

/* Get an element from the dynamic array from a specified position

param: v pointer to the dynamic array

param: pos integer index to get the element from

pre: v is not null

pre: v is not empty

pre: pos < size of the dyn array and >= 0

post: no changes to the dyn Array

ret: value stored at index pos

*/

TYPE getDynArr(DynArr *v, int pos)

{

/* FIXME: You will write this function */

/* FIXME: you must change this return value */

assert(v != 0 && !isEmptyDynArr(v));

assert(pos >= 0 && pos < sizeDynArr(v));

return v->data[pos];

}

/* Put an item into the dynamic array at the specified location,

overwriting the element that was there

param: v pointer to the dynamic array

param: pos the index to put the value into

param: val the value to insert

pre: v is not null

pre: v is not empty

pre: pos >= 0 and pos < size of the array

post: index pos contains new value, val

*/

void putDynArr(DynArr *v, int pos, TYPE val)

{

/* FIXME: You will write this function */

assert(v != 0 && !isEmptyDynArr(v));

assert(pos >= 0 && pos < sizeDynArr(v));

v->data[pos] = val; //put the val in pos overwriting old value

}

/* Swap two specified elements in the dynamic array

param: v pointer to the dynamic array

param: i,j the elements to be swapped

pre: v is not null

pre: v is not empty

pre: i, j >= 0 and i,j < size of the dynamic array

post: index i now holds the value at j and index j now holds the value at i

*/

void swapDynArr(DynArr *v, int i, int j)

{

/* FIXME: You will write this function */

assert(v != 0 && !isEmptyDynArr(v));

assert(i>=0 && j >= 0 && i < sizeDynArr(v) && j < sizeDynArr(v));

TYPE temp = v->data[i];

v->data[i] = v->data[j];

v->data[j] = temp;

}

/* Remove the element at the specified location from the array,

shifts other elements back one to fill the gap

param: v pointer to the dynamic array

param: idx location of element to remove

pre: v is not null

pre: v is not empty

pre: idx < size and idx >= 0

post: the element at idx is removed

post: the elements past idx are moved back one

*/

void removeAtDynArr(DynArr *v, int idx)

{

int i;

/* FIXME: You will write this function */

assert(v != 0 && !isEmptyDynArr(v));

assert(idx >= 0 && idx < sizeDynArr(v));

//more all elements back by 1 position starting from idx

for(i = idx; i < sizeDynArr(v) - 1; i++)

v->data[i] = v->data[i+1];

  

//reduce the size

v->size--;

}

/* ************************************************************************

Stack Interface Functions

************************************************************************ */

/* Returns boolean (encoded in an int) demonstrating whether or not the

dynamic array stack has an item on it.

param: v pointer to the dynamic array

pre: the dynArr is not null

post: none

ret: 1 if empty, otherwise 0

*/

int isEmptyDynArr(DynArr *v)

{

/* FIXME: You will write this function */

assert(v != 0);

/* FIXME: You will change this return value*/

if(sizeDynArr(v) == 0)

return 1;

else

return 0;

}

/* Push an element onto the top of the stack

param: v pointer to the dynamic array

param: val the value to push onto the stack

pre: v is not null

post: size increases by 1

if reached capacity, capacity is doubled

val is on the top of the stack

*/

void pushDynArr(DynArr *v, TYPE val)

{

/* FIXME: You will write this function */

assert(v != 0);

addDynArr(v, val);

}

/* Returns the element at the top of the stack

param: v pointer to the dynamic array

pre: v is not null

pre: v is not empty

post: no changes to the stack

*/

TYPE topDynArr(DynArr *v)

{

/* FIXME: You will write this function */

assert(v != 0 && !isEmptyDynArr(v));

/* FIXME: You will change this return value*/

return v->data[sizeDynArr(v) - 1];

}

/* Removes the element on top of the stack

param: v pointer to the dynamic array

pre: v is not null

pre: v is not empty

post: size is decremented by 1

the top has been removed

*/

void popDynArr(DynArr *v)

{

/* FIXME: You will write this function */

assert(v != 0 && !isEmptyDynArr(v));

removeAtDynArr(v, sizeDynArr(v) - 1);

}

/* ************************************************************************

Bag Interface Functions

************************************************************************ */

/* Returns boolean (encoded as an int) demonstrating whether or not

the specified value is in the collection

true = 1

false = 0

param: v pointer to the dynamic array

param: val the value to look for in the bag

pre: v is not null

pre: v is not empty

post: no changes to the bag

*/

int containsDynArr(DynArr *v, TYPE val)

{

int i;

/* FIXME: You will write this function */

assert(v != 0 && !isEmptyDynArr(v));

/* FIXME: You will change this return value */

for( i = 0; i < sizeDynArr(v); i++)

{

if(EQ(val, v->data[i])) //found the val

return 1;

}

return 0;//did not find

}

/* Removes the first occurrence of the specified value from the collection

if it occurs

param: v pointer to the dynamic array

param: val the value to remove from the array

pre: v is not null

pre: v is not empty

post: val has been removed

post: size of the bag is reduced by 1

*/

void removeDynArr(DynArr *v, TYPE val)

{

int i;

assert(v != 0 && !isEmptyDynArr(v));

/* FIXME: You will write this function */

for(i = 0; i < sizeDynArr(v); i++)

{

if(EQ(val, v->data[i]))

{

removeAtDynArr(v, i); // remove the element at index i

break;

}

}

}

Explanation / Answer

Replace the code from above in your bold section. Thanks!