This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
haas:spring2015:data:projects:dlt0 [2015/04/26 17:12] – [Reference Implementation] wedge | haas:spring2015:data:projects:dlt0 [2015/05/03 13:58] (current) – [Errata] wedge | ||
---|---|---|---|
Line 11: | Line 11: | ||
This section will document any updates applied to the project since original release: | This section will document any updates applied to the project since original release: | ||
- | * __revision | + | * __revision |
+ | * __revision 2__: unit tests for **cptree_r()** and **rmtree()** now available (20150502) | ||
+ | * __revision 3__: unit tests for **grabnode_r()** now available (20150503) | ||
+ | |||
=====Objective===== | =====Objective===== | ||
Line 21: | Line 25: | ||
Truth be told, the simplest tree is merely a list- the underlying data structure we've worked with all semester. But now, under this new light, we can start to look at a list as merely a procession of singled childed nodes. The more things are different, the more they are the same... | Truth be told, the simplest tree is merely a list- the underlying data structure we've worked with all semester. But now, under this new light, we can start to look at a list as merely a procession of singled childed nodes. The more things are different, the more they are the same... | ||
- | The simplest conceptual tree is one which has a minimum | + | The simplest conceptual tree is one which has a maximum |
- | + | ||
- | The premise behind a tree is that of a parent-child relationship. Each node can be a parent (of up to two child nodes), and each child can in turn be its own parent (of up to two child nodes). This creates a connection between relationships of nodes (ie a parent and its descendants), | + | |
+ | The premise behind a binary tree is that of a parent-child relationship. Each node can be a parent (of up to two child nodes), and each child can in turn be its own parent (of up to two child nodes). This creates a connection between relationships of nodes (ie a parent and its descendants), | ||
====conceptualizing a tree==== | ====conceptualizing a tree==== | ||
It is common to think of a tree as a vertical structure, upside-down from the item we commonly think of in nature. Here we will have the tree's " | It is common to think of a tree as a vertical structure, upside-down from the item we commonly think of in nature. Here we will have the tree's " | ||
Line 37: | Line 39: | ||
* an important action that will be taking place is the traversal of the tree- ie walking it in certain orders to achieve desired results (sorting/ | * an important action that will be taking place is the traversal of the tree- ie walking it in certain orders to achieve desired results (sorting/ | ||
- | As we will be placing nodes in the tree according to their stored values (lesser values go to the left, or prior; greater values go to the right, or after), our tree will naturally sort our data for us. As such, the tree we will be implementing | + | As we will be placing nodes in the tree according to their stored values (lesser values go to the left, or prior; greater values go to the right, or after), our tree will naturally sort our data for us, allowing us to search through its contents quite advantageously. As such, the tree we will be implementing |
====tree height can matter==== | ====tree height can matter==== | ||
Line 103: | Line 104: | ||
Figure out what is going on, the connections, | Figure out what is going on, the connections, | ||
+ | ===Suggested Implementation Order=== | ||
+ | To make your life easier, I recommend implementing tree library functions in the following order: | ||
- | ====Node Library unit tests==== | + | - **mktree()** |
- | As a result of the addition of **other**, an updated set of unit tests will be released | + | |
+ | - **searchtree()** | ||
+ | - **traverse_r()** | ||
+ | - **grabnode_r()** | ||
+ | - **cptree_r()** | ||
+ | - **rmtree()** | ||
- | Be sure to run the various node unit tests and verification scripts to see which functions | + | You will really want the later functions |
+ | |||
+ | Note that **grabnode_r()** can be implemented earlier, as it only really needs **mktree()**, | ||
====Tree library unit tests==== | ====Tree library unit tests==== | ||
In **testing/ | In **testing/ | ||
Line 113: | Line 123: | ||
* **unit-addnode.c** - unit test for the various **addnode()** library function | * **unit-addnode.c** - unit test for the various **addnode()** library function | ||
* **unit-searchtree.c** - unit test for the various **searchtree()** library function | * **unit-searchtree.c** - unit test for the various **searchtree()** library function | ||
- | * **unit-grab.c** - unit test for **grabnode_*()** library | + | * **unit-grabnode.c** - unit test for **grabnode_r()** library |
- | * **unit-set_mode.c** - unit test for **set_mode()** library function | + | * **unit-mktree.c** |
- | * **unit-balance.c** - unit test for **balance()** library function | + | * **unit-cptree.c** |
- | * **unit-treeops.c** - unit test for {mk, | + | * **unit-rmtree.c** - unit test for **rmtree()** |
- | * **unit-traverse.c** - unit test for **traverse_*()** library | + | * **unit-traverse.c** - unit test for **traverse_r()** library |
- | * **unit-print.c** - unit test for displaying tree structure | + | |
- | **NOTE**: At the time of project release, unit tests are not yet available; so they will be released as they are developed. | + | **NOTE**: At the time of project release, |
There are also corresponding **verify-FUNCTION.sh** scripts that will output a " | There are also corresponding **verify-FUNCTION.sh** scripts that will output a " | ||
Line 142: | Line 151: | ||
To assist you in verifying a correct implementation, | To assist you in verifying a correct implementation, | ||
- | |||
- | ====node library==== | ||
- | Here is what you should get for node: | ||
- | |||
- | <cli> | ||
- | lab46: | ||
- | ==================================================== | ||
- | = Verifying Doubly-Linked Node Functionality | ||
- | ==================================================== | ||
- | [mknode] Total: | ||
- | [cpnode] Total: | ||
- | [rmnode] Total: | ||
- | ==================================================== | ||
- | | ||
- | ==================================================== | ||
- | lab46: | ||
- | </ | ||
- | |||
- | With the addition of the **other** pointer, we have a few additional combinations to test. | ||