Question 1
Following is a pseudo code of a function that takes a number as an argument, and uses a stack S to do processing.
def fun(n):
S = [] # Say it creates an empty stack S
while n > 0:
# This line pushes the value of n%2 to stack S
S.append(n % 2)
n = n // 2
# Run while Stack S is not empty
while S:
print(S.pop(), end=' ') # pop an element from S and print it
What does the above function do in general?
Prints binary representation of n in reverse order
Prints binary representation of n
Prints the value of Logn
Prints the value of Logn in reverse order
Question 2
Consider the following pseudocode that uses a stack
# Declare a stack of characters
word = "example" # Replace with the word you want to read
char_stack = []
# While there are more characters in the word to read
for c in word:
char_stack.append(c) # Push the character on the stack
# While the stack is not empty
while char_stack:
c = char_stack.pop() # Pop a character off the stack
print(c, end='') # Write the character to the screen
What is output for input "geeksquiz"?
geeksquizgeeksquiz
ziuqskeeg
geeksquiz
ziuqskeegziuqskeeg
Question 3
Following is an incorrect pseudocode for the algorithm which is supposed to determine whether a sequence of parentheses is balanced:
declare a character stack
while ( more input is available)
{
read a character
if ( the character is a '(' )
push it on the stack
else if ( the character is a ')' and the stack is not empty )
pop a character off the stack
else
print "unbalanced" and exit
}
print "balanced"
Which of these unbalanced sequences does the above code think is balanced?
((())
())(()
(()()))
(()))()
Question 4
The following postfix expression with single digit operands is evaluated using a stack:
8 2 3 ^ / 2 3 * + 5 1 * -
Note that ^ is the exponentiation operator. The top two elements of the stack after the first * is evaluated are:
6, 1
5, 7
3, 2
1, 5
Question 5
Let S be a stack of size n >= 1. Starting with the empty stack, suppose we push the first n natural numbers in sequence, and then perform n pop operations. Assume that Push and Pop operation take X seconds each, and Y seconds elapse between the end of one such stack operation and the start of the next operation. For m >= 1, define the stack-life of m as the time elapsed from the end of Push(m) to the start of the pop operation that removes m from S. The average stack-life of an element of this stack is
n(X+ Y)
3Y + 2X
n(X + Y)-X
Y + 2X
Question 6
A single array A[1..MAXSIZE] is used to implement two stacks. The two stacks grow from opposite ends of the array. Variables top1 and top2 (topl< top 2) point to the location of the topmost element in each of the stacks. If the space is to be used efficiently, the condition for “stack full” is:
(top1 = MAXSIZE/2) and (top2 = MAXSIZE/2+1)
top1 + top2 + 1 = MAXSIZE
(top1= MAXSIZE/2) or (top2 = MAXSIZE)
top1= top2 -1
Question 7
Assume that the operators +, -, × are left associative and ^ is right associative. The order of precedence (from highest to lowest) is ^, x , +, -. The postfix expression corresponding to the infix expression a + b × c - d ^ e ^ f is
abc × + def ^ ^ -
abc × + de ^ f ^ -
ab + c × d - e ^ f ^
- + a × bc ^ ^ def
Question 8
To evaluate an expression without any embedded function calls :
As many stacks as the height of the expression tree are needed
One stack is enough
Two stacks are needed
A Turing machine is needed in the general case
Question 9
The result evaluating the postfix expression 10 5 + 60 6 / * 8 – is
284
213
142
71
Question 10
If a stack S contains the integers 2, -3, 2, -1, 2 in order from bottom to top, what is f(S)?
6
4
3
2
There are 30 questions to complete.