CIS-221 Test 3 😖🔫

Ace your homework & exams now with Quizwiz!

which version of increment "++" (pre or post) is generally more efficient

pre (++p); post (p++) makes a copy each time it activates, even if the return value is never used

in general, what are the two components of the body of a recursive function or method?

stopping case (case in which the entire computation is accomplished without recursion) and the recursive call

if DATA is a circular array of CAPACITY elements, and LAST is an index into that array, what is the formula for the index after LAST?

(LAST + 1) % CAPACITY

explain why an iterator using prefix notation (++iter) returns the iterator while an iterator using postfix notation (iter++) returns a copy

++iter increments the value BEFORE returning the value iter++ makes a copy of iter before it's incremented, even if the return value is never used

what is the minimum number of nodes in a complete binary tree with depth 3

8 (?)

consider the following function: void super_write_vertical(int number) // postcondition: the digits of the number have been written, stacked vertically. If number is negative, then a negative sign appears on the top. { if (number < 0 ) { cout << '-' << endl; super_write_vertical(abs(number)); } else if (number < 10) { cout << number << endl; } else { super_write_vertical(number/10); cout << number % 10 << endl; } } what values of number are directly handled by the stopping case?

< 10 and >= 0

for the execution of recursive functions, the compiler and operating system store function invocation information. What data structure is used to store all the executions of the functions? Why is this data structure used? What is this data structure called in the context of programming languages?

A run-time stack it pushes the next activation record to the top of the run-time stack, useful because it uses LIFO instead of FIFO

why is it a bad idea to place USING directives in the implementation of a template class

because there can be conflicts with names in that namespace; could cause naming conflicts

give the traditional terms for adding and removing elements from a queue

enqueue- add dequeue- remove

consider a queue implemented with a linked list, keeping track of a front pointer and a rear pointer. Which, if either, of these pointers will change during an insertion into a non-empty queue?

just rear

draw a complete binary tree with exactly six nodes. Put a different value in each node. Next, assume an array implementation for the binary tree ADT and draw an array with six components showing where each of the six node values would be placed in the array

1 / \ 2 3 / \ / 4 5 6 [1, 2, 3, 4, 5, 6]

Draw a full binary tree with at least 6 nodes

1 / \ 2 3 / \ / \ 4 5 6 7

what is the minimum number of nodes in a full binary tree with depth 3

15

suppose that you are exploring a rectangular maze containing 15 rows and 12 columns. What is the maximum number of recursive calls that can be generated if you start at the entrance of the maze and call traverse_maze()?

15 x 12 is the upper bound

consider this function declaration: void quiz(int i) { if (i > 1) { quiz(i/2); quiz(i/2); } cout << "*"; } how many asterisks are printed by the function call quiz(5)?

7

suppose you have two iterators, s and t, over the same container and both *s and *t equal 42. Will (s == t) always be true? Why or why not?

Both places have the same data, but the corresponding links are not the same; just because the data is the same, doesn't mean the links will be the same

what technique is used to provide the capability to step through items of a container class? Explain the two types of this technique and a pro and con of these types

Internal/External Iterators; internal iterator: Uses member functions to access items pro: simpler to manage con: set number of iterators (typically 1) external: pro: can have any number of iterators con: create separate classes and write methods (more complex)

describe the two differences between the semantics of stacks and queues

LIFO (Stack)- one end to enter elements into FIFO(queue)- two ends to enter elements into

below is a small binary tree 14 /\ 2 11 /\ /\ 1 3 10 30 / / 7 40 circle all the leaves. Put a square box around the root. Draw a star above each ancestor of the node that contains 10. Put a big X through every descendant of the node that contains 10.

Leaves: 1, 3, 7, 40 Root: 14 Ancestors of 10: 11, 14 Descendants of 10: 7

what property of a fractal lends itself to recursive thinking

Recursion is permitting a function implementation to contain a call to itself A fractal is a pattern that produces a picture, which contains an infinite amount of copies of itself.

suppose we have a circular array implementation of the queue class, with ten items in the queue stored at data_[2] through data_[11]. The CAPACITY is 42. Where does the push member function place the new entry in the array?

The new elements are inserted at data[12]

explain the advantage of template functions

allows for several different versions of a function to be created, eliminating the need to create multiple functions when just one can be used

at a minimum, what information does an activation record store?

contains info as to where the function should return after computation

consider the following code with ENQUEUES and DEQUEs const int CAPACITY =5; queue<int> q (CAPACITY); q.enqueue (2); q.enqueue (4); q.enqueue (6); q.enqueue (8); q.enqueue (10); q.dequeue ( ); q.dequeue ( ); q.enqueue (12); Suppose that q represented by a circular array. Draw the state of these private member variables of q after the above code has executed: first_: last_:

data_[0]: 12 data_[1]: data[2]: 6 data[3]: 8 data[4]: 10 first_: data[2] last_: data[0]

which queue operations (enqueue/dequeue, and is_empty), can result in a queue underflow? What are the conditions when this would happen?

dequeue, when is_empty is true

consider this prototype for a template function: template <class Item> void foo(Item x); Which is the right way to call the foo function with an integer argument i?

foo<int>(i)

write a recursive function that has one parameter that is a non-negative integer. The function writes out that number of asterisks(*) to the screen, followed by that number of exclamation points (!) do not use any loops or local variables

func(int times) { if (n > 0) { cout << "*"; func(n-1); cout << "!"; } }

consider an implementation of a queue with a circular array, keeping track of first, last, and count (the number of items in the array). Suppose first is zero, and last is CAPACITY-1. What can be deduced about count?

it could be 0 or full (at capacity); it could be empty or full

considering the write_vertical and super_write_vertical discussed in the textbook, what is another way the super_write_vertical function could use recursion but not by calling itself?

it could call write_vertical in the function instead of super_write_vertical

in the singly linked list implementation of the queue class having the front_ptr_ and rear_ptr_ data members, where does the PUSH member function place the new entry in the linked list? Why?

places it at the rear of the queue, because it is easy to be inserted at the rear but to remove something at the rear requires for the whole list to be traversed to assign rear_ptr to the next value

provide a definition for the phrase EXHAUSTIVE SEARCH WITH BACKTRACKING

the term EXHAUSTIVE SEARCH means that all possibilities are tried. Backtracking is the process of a recursive call returning without finding the goal. When such a recursive call returns, we are back where we started, and we can explore other directions with further recursive calls.

you have computed the set union of two sets with sizes of 10 and 40 but the answer only has 42 items. How can this be?

the two sets had 8 items in common

when a template class is implemented the entire implementation file is included in the header file. Why is this needed?

to make the compiler's job possible; needs to have/know the template implementation code so it can get the ACTUAL implementation code

explain the advantage of template classes

when a class depends on an underlying data type, the class can be implemented as a template class, which gives the class the ability for several different versions of a class to be created from a single class, like a template function

does the compiler generate and compile the implementation of a template function or class when it encounters the implementation or when the implementation is instantiated (when the implementation is invoked) in the code? Why is this?

when implementation is invoked because data types must be filled in to generate code

consider the implementation of the queue using a circular array. what problem arises if we try to keep all the items at the front of a partially-filled array (so data_[0] is always the front)

whenever the first item is removed, all other items must shift so the next item is at data[0]


Related study sets

AIC Chapter 5 - Bidding and Estimating

View Set

Chapter 12 vocab/Child Development

View Set

Psychology Semester Test Study Guide

View Set

Urinalysis and Body Fluids MediaLab - ASCP BOC Review

View Set

Chapter 3 cellular eniroment test bank and workbook

View Set

Arkansas Keyboarding Connections Unit 6 - Tables

View Set

Chapter 4: Video Camera Operations

View Set

2.) The Pleistocene-Holocene Transition:

View Set

Lines in the coordinate plane/ 3-6

View Set

WBC Morphology, Structure, and Function

View Set