07 UnsortedLists
07 UnsortedLists
07 UnsortedLists
Sorted list
• A list in which data items are placed in a
particular order.
• Key: a member of the class whose value is
used to determine the order of the items in
the list.
Unsorted List Implementation
template<class ItemType>
class UnsortedType {
public:
currentPos
void MakeEmpty();
bool IsFull() const;
int LengthIs() const;
void RetrieveItem(ItemType&, bool&);
void InsertItem(ItemType);
void DeleteItem(ItemType);
void ResetList();
bool IsLastItem()
void GetNextItem(ItemType&);
private:
int length;
ItemType info[MAX_ITEMS];
int currentPos;
};
Length: length of the list (i.e., different from array size!)
Unsorted List Implementation
template<class ItemType>
(cont.)
void UnsortedType<ItemType>::MakeEmpty()
{
length = 0;
} O(1)
template<class ItemType>
bool UnsortedType<ItemType>::IsFull() const
{
return (length == MAX_ITEMS); O(1)
}
Unsorted List Implementation
(cont.)
template<class ItemType>
int UnsortedType<ItemType>::LengthIs() const
{
return length; O(1)
}
RetrieveItem (ItemType& item,
Boolean& found)
• Function: Retrieves list element whose key matches
item's key (if present).
• Preconditions: (1) List has been initialized,
(2) Key member of item has been initialized.
Retrieve Judy
Unsorted List Implementation
(cont.)
template<class ItemType>
void UnsortedType<ItemType>::RetrieveItem (ItemType& item,
bool& found)
{
int location = 0;
found = false;
while( (location < length) && !found)
if (item == info[location]) {
O(N)
found = true;
item = info[location];
}
else
location++; Client/User of the class
}
must overload “==“
InsertItem (ItemType item)
• Function: Adds item to list
• Preconditions:
(1) List has been initialized,
(2) List is not full,
(3) item is not in list (i.e., no duplicates)
template<class ItemType>
void UnsortedType<ItemType>::InsertItem (ItemType
item)
{
info[length] = item; O(1)
length++;
}
DeleteItem (ItemType item)
• Function: Deletes the element whose key
matches item's key
possible better
solution solution
Unsorted List Implementation (cont.)
template<class ItemType>
void UnsortedType<ItemType>::DeleteItem(ItemType item)
{
int location = 0;
while(item != info[location])
location++; O(N)
O(N)
info[location] = info[length - 1];
length--; O(1)
}
Traversing the List
• ResetList
currentPos
• GetNextItem
• IsLastItem
ResetList
• Function: Initializes current position for an
iteration through the list.
template<class ItemType>
void UnsortedType<ItemType>::ResetList()
{
currentPos = -1; O(1)
}
GetNextItem (ItemType& item)
• Function: Gets the next element in list.
template<class ItemType>
void UnsortedType<ItemType>::GetNextItem (ItemType& item)
{
currentPos++;
item = info[currentPos]; O(1)
}
template<class ItemType>
bool UnsortedType<ItemType>::IsLastItem ()
{
return (currentPos == length-1); O(1)
}
Exercise 3 (page 185): Write a client
function that splits an unsorted list into two
unsorted lists using the following
specification.
list1.MakeEmpty();
list2.MakeEmpty();
list.ResetList();
What is the time
while (!list.IsLastItem()) { complexity
list.GetNextItem(listItem); using big-O?
if(listItem > item)
list2.InsertItem(listItem);
else O(N)
list1.InsertItem(listItem);
}
}
Exercise: Write a client function that merges
two unsorted lists into another unsorted list
using the following specification.
list.MakeEmpty();
list1.ResetList();
while(!list1.IsLastItem()) {
list1.GetNextItem(item);
list.InsertItem(item);
}
list2.ResetList();
while (!list2.IsLastItem() && (!list.IsFull())) {
list2.GetNextItem(item);
list.RetrieveItem(item, found);
if(!found)
list.InsertItem(item)
}