Ho un problema in elenco collegato ordinato. Non riesco a inserire un oggetto in tempo costante. Se possibile, come posso risolverlo?Come inserire un elemento in una lista concatenata ordinata con una complessità a tempo costante?
E questa volta funzione di complessità è Big-O (N)
template <class ItemType>
void SortedType<ItemType>::InsertItem(ItemType item)
{
NodeType<ItemType>* newNode;
NodeType<ItemType>* predLoc;
NodeType<ItemType>* location;
bool moreToSearch;
location = listData;
predLoc = NULL;
moreToSearch = (location != NULL);
while (moreToSearch)
{
if (location->info < item)
{
predLoc = location;
location = location->next;
moreToSearch = (location != NULL);
}
else moreToSearch = false;
}
newNode = new NodeType<ItemType>;
newNode->info = item;
if (predLoc == NULL)
{
newNode->next = listData;
listData = newNode;
}
else
{
newNode->next = location;
predLoc->next = newNode;
}
length++;
}
Non puoi. Se potessi farlo, avresti rivoluzionato l'ordinamento, potresti iniziare con una lista concatenata vuota, che per definizione dovrebbe essere ordinata, aggiungere il primo elemento, ancora ordinata, e poi continuare, il che significherebbe che gli elementi di ordinamento sarebbero O (n), questo è impossibile. –