CPSC 225, Spring 2002
Quiz #4, April 22This is the fourth and final quiz in CPSC 225: Intermediate Programming.
Question 1: Explain the fundamental difference between a stack and a queue.
Answer: Either a queue or a stack contains a sequence of items, and items can only be inserted at one end of the sequence. The difference is how items are removed. For a stack, items are removed from the same end where they are added, so that the item that is removed is the one that was added most recently. This makes a stack a "first in last out" data structure. For a queue, items are removed from the opposite end, so that items are removed in the same order in which they were added. This makes a queue a "first in first out" data structure.
Question 2: Suppose that pile is a stack of ints, with the usual operations push, pop, and isEmpty. Explain the purpose of the following code segment:
while (true) { int N; cin >> N; if (N == 0) break; pile.push(N); } while (pile.isEmpty() == false) { cout << pile.pop() << endl; }Answer: This reads a sequence of non-zero integers from the user, stopping when the user enters a zero, and then prints the same integers in the reverse of the order in which they were entered.
Question 3: Postfix expressions can be evaluated using stacks. Show the sequence of stack operations that is used in the evaluation of 15 3 - 2 7 2 + * +. (Draw the stack at each step.)
Answer:
| | | | | | | | | | Start | | | | | | | | | | with | | -------> | | -------> | | ----------> | | -------> | | an | | push 15 | | push 3 | 3 | pop 3 | | push 2 | 2 | empty | | | 15 | | 15 | pop 15 | 12 | | 12 | stack +----+ +----+ +----+ push 15-3 +----+ +----+ | | | | | | | | | | | 2 | | | | | -------> | 7 | -------> | 7 | --------> | 9 | --------> | | push 7 | 2 | push 2 | 2 | pop 2 | 2 | pop 9 | 18 | | 12 | | 12 | pop 7 | 12 | pop 2 | 12 | +----+ +----+ push 7+2 +----+ push 2*9 +----+ | | | | | | | | -----------> | | ---------> | | The value of the pop 18 | | pop 30 | | expression is 30. pop 12 | 30 | | | push 12+18 +----+ +----+
Question 4: Suppose that a template class Stack<T> is used to define stacks of items of type T.
(a) How would you define pile as a variable that represents a stack of items of type int ?
(b) Write the beginning (the first two lines) of the template class declaration.
(c) What is the advantage of declaring a template class, rather than an ordinary class, to represent stacks?
Answer:
(a) Stack<int> pile; (b) template<class T> // ("T" can be any identifier.) class Stack { // ("Stack" could be "Stack<T>.) (c) A single stack template can be used to make stacks of any type of item. If ordinary classes were used, a different class would be necessary for each item type, even though these classes would be very similar.