# Stack

Question 1 |

void fun(int n) { Stack S; // Say it creates an empty stack S while (n > 0) { // This line pushes the value of n%2 to stack S push(&S, n%2); n = n/2; } // Run while Stack S is not empty while (!isEmpty(&S)) printf("%d ", pop(&S)); // 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 |

**Stack**

**Discuss it**

Question 2 |

Managing function calls | |

The stock span problem | |

Arithmetic expression evaluation | |

All of the above |

**Stack**

**Discuss it**

Question 3 |

In push operation, if new nodes are inserted at the beginning of linked list, then in pop operation, nodes must be removed from end. | |

In push operation, if new nodes are inserted at the end, then in pop operation, nodes must be removed from the beginning. | |

Both of the above | |

None of the above |

**Stack**

**Discuss it**

**L**ast

**I**n

**F**irst

**O**ut order, a stack can be implemented using linked list in two ways: a) In push operation, if new nodes are inserted at the beginning of linked list, then in pop operation, nodes must be removed from beginning. b) In push operation, if new nodes are inserted at the end of linked list, then in pop operation, nodes must be removed from end.

Question 4 |

declare a stack of characters while ( there are more characters in the word to read ) { read a character push the character on the stack } while ( the stack is not empty ) { pop a character off the stack write the character to the screen }What is output for input "geeksquiz"?

geeksquizgeeksquiz | |

ziuqskeeg | |

geeksquiz | |

ziuqskeegziuqskeeg |

**Stack**

**Discuss it**

Question 5 |

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? Source: http://www.cs.colorado.edu/~main/questions/chap07q.html

((()) | |

())(() | |

(()())) | |

(()))() |

**Stack**

**Discuss it**

Question 6 |

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 |

**Stack**

**Discuss it**

1. While there are input tokens left o Read the next token from input. o If the token is a value + Push it onto the stack. o Otherwise, the token is an operator (operator here includes both operators, and functions). * It is known a priori that the operator takes n arguments. * If there are fewer than n values on the stackSource for algorithm: http://en.wikipedia.org/wiki/Reverse_Polish_notation#The_postfix_algorithm Let us run the above algorithm for the given expression. First three tokens are values, so they are simply pushed. After pushing 8, 2 and 3, the stack is as follows(Error)The user has not input sufficient values in the expression. * Else, Pop the top n values from the stack. * Evaluate the operator, with the values as arguments. * Push the returned results, if any, back onto the stack. 2. If there is only one value in the stack o That value is the result of the calculation. 3. If there are more values in the stack o(Error)The user input has too many values.

8, 2, 3When ^ is read, top two are popped and power(2^3) is calculated

8, 8When / is read, top two are popped and division(8/8) is performed

1Next two tokens are values, so they are simply pushed. After pushing 2 and 3, the stack is as follows

1, 2, 3When * comes, top two are popped and multiplication is performed.

1, 6

Question 7 |

n(X+ Y) | |

3Y + 2X | |

n(X + Y)-X | |

Y + 2X |

**Stack**

**Discuss it**

Question 8 |

(top1 = MAXSIZE/2) and (top2 = MAXSIZE/2+1) | |

top1 + top2 = MAXSIZE | |

(top1= MAXSIZE/2) or (top2 = MAXSIZE) | |

top1= top2 -1 |

**Stack**

**Discuss it**

Question 9 |

abc × + def ^ ^ - | |

abc × + de ^ f ^ - | |

ab + c × d - e ^ f ^ | |

- + a × bc ^ ^ def |

**GATE-CS-2004**

**Stack**

**Discuss it**

**parul Sharma.**

Question 10 |

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 |

**GATE-CS-2002**

**Stack**

**Discuss it**

Any expression can be converted into Postfix or Prefix form.

Prefix and postfix evaluation can be done using a single stack.

For example : Expression '10 2 8 * + 3 -' is given.

PUSH 10 in the stack.

PUSH 2 in the stack.

PUSH 8 in the stack.

When operator '*' occurs, POP 2 and 8 from the stack.

PUSH 2 * 8 = 16 in the stack.

When operator '+' occurs, POP 16 and 10 from the stack.

PUSH 10 * 16 = 26 in the stack.

PUSH 3 in the stack.

When operator '-' occurs, POP 26 and 3 from the stack.

PUSH 26 - 3 = 23 in the stack.

So, 23 is the answer obtained using single stack.

Thus, option (A) is correct.

Please comment below if you find anything wrong in the above post.