You only have free questions left (including this one) .
You want to be able to access the largest element in a stack.
You've already implemented this Stack structure :
typedef struct StackNode {
void *value;
struct StackNode *next;
} StackNode;
typedef struct Stack {
StackNode *top;
} Stack;
/* Allocate and initialize an empty stack */
Stack * stackNew()
{
Stack *stack = calloc(1, sizeof(Stack));
assert(stack != NULL);
return stack;
}
/* Free a previously allocated stack */
void stackFree(Stack *stack)
{
if (stack != NULL) {
StackNode *node = stack->top;
while (node != NULL) {
StackNode *next = node->next;
free(node->value);
free(node);
node = next;
}
free(stack);
}
}
/* Check if the stack is empty */
int stackIsEmpty(const Stack *stack)
{
assert(stack != NULL);
return stack->top == NULL;
}
/* Push a new item onto the stack */
void stackPush(Stack *stack, const void *value, size_t valueSize)
{
assert(stack != NULL);
StackNode *node = malloc(sizeof(StackNode));
assert(node != NULL);
if (valueSize > 0) {
node->value = malloc(valueSize);
assert(node->value != NULL);
memcpy(node->value, value, valueSize);
}
else {
node->value = NULL;
}
node->next = stack->top;
stack->top = node;
}
/* Remove and return the last item */
void stackPop(Stack *stack)
{
assert(stack != NULL);
assert(stack->top != NULL);
StackNode *next = stack->top->next;
free(stack->top->value);
free(stack->top);
stack->top = next;
}
/* Return the last item without removing it */
void * stackPeek(const Stack *stack)
{
assert(stack != NULL);
assert(stack->top != NULL);
return stack->top->value;
}
Use your Stack structure to implement a new structure MaxStack with a function getMax that returns the largest element in the stack. getMax should not remove the item.
Your stacks will contain only integers.
What if we push several items in increasing numeric order (like 1, 2, 3, 4...), so that there is a new max after each push ? What if we then pop each of these items off, so that there is a new max after each pop ? Your algorithm shouldn't pay a steep cost in these edge cases.
You should be able to get a runtime of for push , pop , and getMax .
Start your free trial!
Log in or sign up with one click to get immediate access to free mock interview questions
We'll never post on your wall or message your friends.
Where do I enter my password?
Actually, we don't support password-based login. Never have. Just the OAuth methods above. Why?
It's easy and quick. No "reset password" flow. No password to forget.
It lets us avoid storing passwords that hackers could access and use to try to log into our users' email or bank accounts.
It makes it harder for one person to share a paid Interview Cake account with multiple people.
Start your free trial!
Log in or sign up with one click to get immediate access to free mock interview questions
We'll never post on your wall or message your friends.
Where do I enter my password?
Actually, we don't support password-based login. Never have. Just the OAuth methods above. Why?
It's easy and quick. No "reset password" flow. No password to forget.
It lets us avoid storing passwords that hackers could access and use to try to log into our users' email or bank accounts.
It makes it harder for one person to share a paid Interview Cake account with multiple people.
time for push , pop , and getMax . additional space, where m is the number of operations performed on the stack.
Our solution requires additional
space for the second stack. But do we really need it?
Can you come up with a solution that
requires additional space? (It's
tricky!)
Start your free trial!
Log in or sign up with one click to get immediate access to free mock interview questions
We'll never post on your wall or message your friends.
Where do I enter my password?
Actually, we don't support password-based login. Never have. Just the OAuth methods above. Why?
It's easy and quick. No "reset password" flow. No password to forget.
It lets us avoid storing passwords that hackers could access and use to try to log into our users' email or bank accounts.
It makes it harder for one person to share a paid Interview Cake account with multiple people.
Editor
Reset editor
vim/emacs?
regular
vim
emacs
Run
{"id":36028169,"username":"2024-10-30_00:00:39_#@jqmt","email":null,"date_joined":"2024-10-30T00:00:39.378530+00:00","first_name":"","last_name":"","full_name":"","short_name":"friend","is_anonymous":true,"is_on_last_question":false,"percent_done":0,"num_questions_done":0,"num_questions_remaining":46,"is_full_access":false,"is_student":false,"first_payment_date":null,"last_payment_date":null,"num_free_questions_left":3,"terms_has_agreed_to_latest":false,"preferred_content_language":"python","preferred_editor_language":"","is_staff":false,"auth_providers_human_readable_list":"","num_auth_providers":0,"auth_email":""}
×
“ I got the job! Interview Cake was definitely worth the investment--it gave me a huge advantage by exposing me to the kind of questions they were going to ask. Thanks!
—
Eric
. . .