// Chap 11, pp 523 - 526
// Rename this file as TableA.h

// *********************************************************
// Header file TableA.h for the ADT table.
// Sorted array-based implementation.
// Assumption: A table contains at most one item with a
//             given search key at any time.
// *********************************************************
#include "boolean.h"
const int MAX_TABLE = 100;

typedef int keyType;  // desired-type-of-search-key
struct dataItem
{  keyType Key;
   //... and probably other data members
};  // end struct
typedef dataItem tableItemType;
typedef void (*functionType)(tableItemType& AnItem);

class tableClass
{
public:
// constructors and destructor:
   tableClass();
   tableClass(const tableClass& T);
   virtual ~tableClass();

// table operations:
// Precondition for all operations: The constructor has been 
// called. No two items of the table have the same search 
// key. The table's items are sorted by search key.

   virtual boolean TableIsEmpty();
   // Determines whether a table is empty.
   // Postcondition: Returns TRUE if the table was empty,
   // otherwise returns FALSE.

	 virtual int TableLength();
   // Determines the length of a table.
   // Postcondition: Returns the number of items in the 
   // table.

   virtual void TableInsert(tableItemType NewItem, 
                            boolean& Success);
   // Inserts an item into a table in its proper sorted
   // order according to the item's search key.
   // Precondition: The item to be inserted into the table 
   // is NewItem, whose search key differs from all search 
   // keys presently in the table.
   // Postcondition: If the insertion was successful, 
   // NewItem is in its proper order in the table and 
   // Success is TRUE. Otherwise, the table is unchanged 
   // and Success is FALSE.

   virtual void TableDelete(keyType SearchKey,
                            boolean& Success);
   // Deletes an item with a given search key from a table.
	// Precondition: SearchKey is the search key of the item
   // to be deleted.
   // Postcondition: If the item whose search key equals
   // SearchKey existed in the table, the item is deleted 
   // and Success is TRUE. Otherwise, the table is unchanged
   // and Success is FALSE.

   virtual void TableRetrieve(keyType SearchKey,
                              tableItemType& TableItem, 
                              boolean& Success);
   // Retrieves an item with a given search key from a 
   // table.
   // Precondition: SearchKey is the search key of the item 
   // to be retrieved.
   // Postcondition: If the retrieval was successful,
   // TableItem contains the retrieved item and Success is
   // TRUE. If no such item exists, TableItem and the table 
   // are unchanged and Success is FALSE.

   virtual void TraverseTable(functionType Visit);
	// Traverses a table in sorted search-key order, calling
   // function Visit once for each item.
   // Precondition: The function represented by Visit
   // exists outside of the ADT implementation.
   // Postcondition: Visit's action occurs once for each 
   // item in the table.
   // Note: Visit can alter the table.

// overloaded operator:
	virtual void operator=(const tableClass T);

protected:
   void SetSize(int NewSize);
   // Sets the private data member Size to NewSize.

   void SetItem(tableItemType NewItem, int Index);
   // Sets Items[Index] to NewItem.

   int Position(keyType SearchKey);
   // Finds the position of a table item or its insertion 
   // point.
   // Precondition: SearchKey is the value of the search key
   // sought in the table.
	// Postcondition: Returns the index (between 0 and
   // Size - 1) of the item in the table whose search key 
   // equals SearchKey. If no such item exists, returns the 
   // position (between 0 and Size) that the item would 
   // occupy if inserted into the table. The table is 
   // unchanged.
   // Calls: KeyIndex.

private:
   tableItemType Items[MAX_TABLE];  // table items
   int           Size;              // table size

   int KeyIndex(int First, int Last, keyType SearchKey);
   // Searches a particular portion of the private array 
   // Items for a given search key by using a binary search.
   // Precondition: 0 <= First, Last < MAX_TABLE, where
   // MAX_TABLE = max size of the array, and 
   // Items[First].Key <= Items[First+1].Key <= ... <= 
   // Items[Last].Key.
   // Postcondition: If SearchKey is in the array, returns
   // the index of the array element that contains 
   // SearchKey; otherwise returns the index (between First 
   // and Last) of the array element that the item would 
   // occupy if inserted into the array in its proper 
   // order. The array is unchanged.
};  // end class
// End of header file.

    Source: geocities.com/siliconvalley/program/2864/ds/CHAP11

               ( geocities.com/siliconvalley/program/2864/ds)                   ( geocities.com/siliconvalley/program/2864)                   ( geocities.com/siliconvalley/program)                   ( geocities.com/siliconvalley)