======Project:Binary Sort Project======
A project for Data Structures by Dave Schoeffler during the Fall 2011 semester.
This project was begun on December 14th and was completed on December 14th.
=====Objectives=====
This project will utilize my own binary tree library to sort a tree of elements
=====Prerequisites=====
In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:
* understand functions
* understand pointers
* understand structs
* understand malloc()
* ability to use a binary tree data structure
=====Background=====
The point of this project is to use a binary search tree to sort a list elements.
=====Scope=====
This program will utilize my functions in my tree library. These functions are insert() and display().
=====Attributes=====
* pointers: pointers are at the heart of dynamic structures.
* linked lists: this code is going to implement linked lists.
* doubly linked lists: not only is the code implementing a linked list, it is implementing doubly linked lists.
* libraries: this code will be part of a library that can be reused in other projects
* trees: this code will implement the use of trees
* sorts: the display function is a sorting algorithm in itself
=====Code=====
====Header File====
//Header files for my tree library
#ifndef _TREE_H_
#define _TREE_H_
#include
#include
//node structure that contains an char value and two node pointers
struct node
{
char value;
struct node *left;
struct node *right;
};
typedef struct node Node;
//tree structure that contain the root node of the tree and a tmp node pointer
struct tree
{
struct node *root;
struct node *tmp;
};
typedef struct tree Tree;
//function prototypes
Tree *insert(Tree *, char);
void display(aTree);
#endif
====Functions====
===display.c===
//function display() prints out the contents of a binary
//search tree that stores characters in lexicographical order.
#include "tree.h"
//this functions uses recursion to display the contents of the tree
void display(Node *root)
{
if( root != NULL)
{
display(root -> left);
printf(" %c ,", root -> value);
display(root -> right);
}
}
===insert.c===
//function insert() inserts a node to a given binary tree, if no tree
//exists it will create one and make the root node equal to the value given
#include "tree.h"
Tree *insert(Tree *aTree, char input)
{
Node *tmpNode;
tmpNode = malloc(sizeof(Node *));
tmpNode -> value = input;
if(aTree -> root != NULL)//if there is a tree
{
aTree -> tmp = aTree -> root;//setting a tmp pointer equal to the root
while(aTree -> tmp -> value != tmpNode -> value)
{
if(tmpNode -> value < aTree -> tmp -> value)
{
if(aTree -> tmp -> left != NULL)
{
aTree -> tmp = aTree -> tmp -> left;
}
else
{
aTree -> tmp -> left = tmpNode;
}
}
else
{
if(aTree -> tmp -> right != NULL)
{
aTree -> tmp = aTree -> tmp -> right;
}
else
{
aTree -> tmp -> right = tmpNode;
}
}
}
}
else
{
aTree -> root = tmpNode;
}
return aTree;//return the tree with the new node added
}
====Main Function====
===tree.c===
/*******************************************************
* Author: Dave Schoeffler *
* This program will utilize my own binary tree library *
* to accept as input unique characters from the user *
* and store them in a binary tree. After that it will *
* display the characters in lexiographical order. *
* *
* Compile with: gcc -o tree tree.c -ltree -L. *
* *
* Execute with: ./tree *
* *
*******************************************************/
#include "tree.h"//my tree library
int main()
{
//declaration of a Tree struc that will be used to store the characters
Tree *aTree;
aTree = malloc(sizeof(Tree *));
char choice, junk;//variable choice will be used to store the current
//character from the user
printf("Enter a letter( '.' to quit): ");//user prompt for input
scanf("%c",&choice);
scanf("%c",&junk);
while( choice != '.')
{
aTree = insert(aTree, choice);//this line sends the character to the
//insert node function
printf("Enter a letter( '.' to quit): ");
scanf("%c",&choice);
scanf("%c",&junk);
}
printf("The following values are contained in this binary tree: ");
display(aTree -> root);//displays the tree values in lexigraphical order
printf("\n");
return (0);
}
=====Execution=====
lab46:~/src/data/eoce/0x4$ ./tree
Enter a letter( '.' to quit): b
Enter a letter( '.' to quit): d
Enter a letter( '.' to quit): e
Enter a letter( '.' to quit): f
Enter a letter( '.' to quit): c
Enter a letter( '.' to quit): a
Enter a letter( '.' to quit): g
Enter a letter( '.' to quit): .
The following values are contained in this binary tree: a , b , c , d , e , f , g ,
lab46:~/src/data/eoce/0x4$
=====Reflection=====
This project was fairly because it was fairly similar to my other tree implementation. All I had to do was rewrite my main function and I was done.
=====References=====
* [[http://en.wikipedia.org/wiki/Binary_search_tree]]
* C++ Programming D.S. Malik
* Matthew Haas
* Brandon Kennedy