// ********************************************************* // Implementation file ListA.cpp for the ADT list. // Array-based implementation. // ********************************************************* #include "ListA.h" // header file listClass::listClass() : Size(0) { } // end default constructor bool listClass::ListIsEmpty() const { return bool(Size == 0); } // end ListIsEmpty int listClass::ListLength() const { return Size; } // end ListLength void listClass::ListInsert(int NewPosition, listItemType NewItem, bool& Success) { Success = bool( (NewPosition >= 1) && (NewPosition <= Size+1) && (Size < MAX_LIST) ); if (Success) { // make room for new item by shifting all items at // positions >= NewPosition toward the end of the // list (no shift if NewPosition == Size+1) for (int Position = Size; Position >= NewPosition; --Position) Items[Index(Position+1)] = Items[Index(Position)]; // insert new item Items[Index(NewPosition)] = NewItem; ++Size; } // end if } // end ListInsert void listClass::ListDelete(int Position, bool& Success) { Success = bool( (Position >= 1) && (Position <= Size) ); if (Success) { // delete item by shifting all items at positions > // Position toward the beginning of the list // (no shift if Position == Size) for (int FromPosition = Position+1; FromPosition <= Size; ++FromPosition) Items[Index(FromPosition-1)] = Items[Index(FromPosition)]; --Size; } // end if } // end ListDelete void listClass::ListRetrieve(int Position, listItemType& DataItem, bool& Success) const { Success = bool( (Position >= 1) && (Position <= Size) ); if (Success) DataItem = Items[Index(Position)]; } // end ListRetrieve int listClass::Index(int Position) const { return Position-1; } // end Index // End of implementation file.