Data structures hw help, computer science, Basic Computer Science

Assignment Help:
Create an implementation of the Ordered Associative Array API using left-leaning red-black trees. Illustrate the use of the API by refactoring your WordBench as a client of Ordered Associative Array API.

Needs:
oaa.h # the ordered associative array class template
wordbench2.h # defines wordbench refactored to use the OAA API
wordbench2.cpp # implements wordbench2.h

Given:
main2.cpp # driver program for wordbench2
focpp # functionality test for OAA
rantable.cpp # random table file generator

Define and implement the class template OAA, placing the code in the file oaa.h.

Thoroughly test your OAA<> with the distributed test client programs foaa.cpp and moaa.cpp. Be sure to log all test activity.

Define the application WordBench, refactored as a client of OAA, in the header file wordbench2.h, and implement the refactored WordBench in the file wordbench2.cpp

Requirements - Ordered Associative Array
The following definition should be used:

template < typename K , typename D , class P = LessThan >
class OAA
{
public:

typedef K KeyType;
typedef D DataType;
typedef P PredicateType;

OAA ();
explicit OAA (P p);
~OAA ();

DataType& operator [] (const KeyType& k) { return Get(k); }

void Put (const KeyType& k , const DataType& d);
D& Get (const KeyType& k);
void Clear ();

bool Empty () const;
size_t Size () const;
int Height () const;

template
void Traverse (F f) const { RTraverse(root_,f); }

void Display (std::ostream& os, int cw1, int cw2) const;

void Dump (std::ostream& os) const;
void Dump (std::ostream& os, int cw) const;
void Dump (std::ostream& os, int cw, char fill) const;

enum Flags { ZERO = 0x00 , DEAD = 0x01, RED = 0x02 , DEFAULT = RED };
static const char* ColorMap (unsigned char flags)
{
switch(flags)
{
case 0x00: case 0x01: return ANSI_COLOR_BOLD_BLUE; // bits 00, 01
case 0x02: case 0x03: return ANSI_COLOR_BOLD_RED; // bits 10, 11
default: return "unknown color"; // unknown flags
}
}

private: // definitions and relationships

class Node // vertex in the tree structure
{
const KeyType key_;
DataType data_;
Node * lchild_,
* rchild_;
unsigned char flags_;
Node (const KeyType& k, const DataType& d, Flags flags = DEFAULT)
: key_(k), data_(d), lchild_(0), rchild_(0), flags_(flags)
{}
friend class OAA;
bool IsRed () const { return 0 != (RED & flags_); }
bool IsBlack () const { return !IsRed(); }
void SetRed () { flags_ |= RED; }
void SetBlack () { flags_ &= ~RED; }
}; // internal class Node

class PrintNode // function class facilitates Display()
{
public:
PrintNode (std::ostream& os, int cw1, int cw2) : os_(os), cw1_(cw1), cw2_(cw2)
{}
void operator() (const Node * n) const
{
os_ << std::setw(cw1_) << n->key_ << std::setw(cw2_) << n->data_ << ''\n'';
}
private:
std::ostream& os_;
int cw1_, cw2_;
}; // internal function class PrintNode

private: // data
Node * root_;
PredicateType pred_;

private: // methods
static Node * NewNode(const K& k, const D& d, Flags flags = DEFAULT);
static void RRelease(Node* n); // deletes all descendants of n
static size_t RSize(Node * n);
static int RHeight(Node * n);

template < class F >
static void RTraverse (Node * n, F f);

// recursive left-leaning get
Node * RGet(Node* nptr, const K& kval, Node*& location);

// rotations
static Node * RotateLeft(Node * n);
static Node * RotateRight(Node * n);

private: // copy facilitation - do not implement
OAA (const OAA& a); // copy constructor
OAA& operator= (const OAA& a); // assignment operator
}; // class OAA

It is worth pointing out what is NOT in these requirements that would be in a "full" OAA API:

Object comparison operators == and !=
Copy constructor and assignment operator
Iterators and iterator support
Remove or Erase
The remaining portion of the OAA API consist of Get, Put, Clear, constructors and destructor -- arguably the minimal necessary for a useful container.

Note that the AA bracket operator is in the interface and is implemented in-line above with a single call to Get. Also note that Put can be implemented with a single call to Get, which leaves Get as the principal functionality requiring implementation.

The various const methods measure useful characteristics of the underlying BST and provide output useful in the development process as well as offering client programs insight into the AA structure.

The various "private" statements are redundant, but they emphasize the various reasons for using that designation: (1) to have private in-class definitions, such as Node or typedef statements, and to record any friend relationships that might be needed; (2) private data in the form of variables; (3) private methods; and (4) things that are privatized to prevent their use.

Requirements - WordBench
Here is a working header file for the refactored WordBench:

/*
wordbench2.h
*/

#include
#include
#include

class WordBench
{
public:
WordBench ();
virtual ~WordBench ();
bool ReadText (const fsu::String& infile);
bool WriteReport (const fsu::String& outfile, unsigned short c1 = 15, unsigned short c2 = 15) const;
void ShowSummary () const;
void Erase ();

private:
typedef fsu::String KeyType;
typedef size_t DataType;

size_t count_;
fsu::OAA < KeyType , DataType > frequency_;
fsu::List < fsu::String > infiles_;
static void Cleanup (fsu::String& s);
} ;

The set "wordset_" from the original design is replaced with the ordered associative array "frequency_".

Note the private terminology is changed slightly. (Of course, the API is not changed.) The main storage OAA is called frequency_ which makes very readable code of this form:

...
Cleanup(str);
if (str.Length() != 0)
{
++frequency_[str];
++numwords;
} // end if
...

This snippet is the inner core of the processing loop implementing ReadText. The main loop implementing ReadText is now only 5 lines of code.

Another small change is that it is no longer possible to loop through the data to count the words, because we are not defining an Iterator class. We could work out a way to make this count using a traversal with a special function object that retrieves the specific frequencies, but it is simpler just to have a class variable count_ that maintains the total number of words read (and is reset to 0 by Clear()).

Related Discussions:- Data structures hw help, computer science

Outdoor patient department features - a patient registry, A Patient Regist...

A Patient Registry Name, Surname and Address  Sex  Caste  Contact Numbers  Area (Rural/Urban/Suburban)  City/District  State  General Examination deta

C programming, input is n positive numbers and reverse it, out put gv the a...

input is n positive numbers and reverse it, out put gv the absolute difference and give the reverse(magic number),using function reverseinteger, and function generate magicnumber

ASSIGNMENTS, A STAIRCASE LIGHT IS CONTROLLED BY TWO SWITCHES ONE AT THE TOP...

A STAIRCASE LIGHT IS CONTROLLED BY TWO SWITCHES ONE AT THE TOP OF THE STAIRS AND ANOTHER AT THE BOTTOM OF STAIRS

Memory, what is cache memory

what is cache memory

How to set up the location (e.g. plaza, how to set up the location (e.g. pl...

how to set up the location (e.g. plaza, hall of fame, lecture theater or etc.) and services that will be used during the exhibition; devices needed; and finally produced a compreh

Types of browsers, Types of Browsers: Line Mode Browsers : The initia...

Types of Browsers: Line Mode Browsers : The initial browsers were line mode text browsers. These browsers were simple and used to display text line by line. They used to prov

Arrays and strings, This is a C file. 1. The program starts by printing you...

This is a C file. 1. The program starts by printing your name with an end sign ">". For example, "NAME >"; 2. Then, you can type in a string. If the string is not "vi xxx", you pri

Explain the different methods of encryption technique, Problem When a d...

Problem When a data is sent across the network it is encrypted and arranged in a way that even if there is a diversion in the flow of data should not leak the data. At the rece

Optical disk storage and cd - rom, Optical disk storage and cd - ROM: ...

Optical disk storage and cd - ROM: Optical disk storage is relatively new alternative to magnetic storage. Digital data is burnt into the surface of a plastic disk coated with

Features of python, • Easy-to-learn: Python has comparatively few keywords,...

• Easy-to-learn: Python has comparatively few keywords, easy structure, and a clearly distinct syntax. This permits the student to pick up the language in a comparatively short per

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd