Data structures 如何在时间复杂度不变的情况下在排序链表中插入项目?
排序链表中有问题。无法在固定时间内插入项。如果可能的话,我怎么解决呢 这个函数的时间复杂度是Big-O(N)Data structures 如何在时间复杂度不变的情况下在排序链表中插入项目?,data-structures,Data Structures,排序链表中有问题。无法在固定时间内插入项。如果可能的话,我怎么解决呢 这个函数的时间复杂度是Big-O(N) 模板 void SortedType::InsertItem(ItemType项) { NodeType*newNode; 节点类型*predLoc; 节点类型*位置; 布尔·莫雷托研究; 位置=列表数据; predLoc=NULL; moreToSearch=(位置!=NULL); while(moreToSearch) { 如果(位置->信息下一步; moreToSearch=(位置
模板
void SortedType::InsertItem(ItemType项)
{
NodeType*newNode;
节点类型*predLoc;
节点类型*位置;
布尔·莫雷托研究;
位置=列表数据;
predLoc=NULL;
moreToSearch=(位置!=NULL);
while(moreToSearch)
{
如果(位置->信息<项目)
{
predLoc=位置;
位置=位置->下一步;
moreToSearch=(位置!=NULL);
}
else-moreToSearch=false;
}
newNode=新节点类型;
新建节点->信息=项目;
如果(predLoc==NULL)
{
newNode->next=listData;
listData=newNode;
}
其他的
{
新建节点->下一步=位置;
predLoc->next=newNode;
}
长度++;
}
无法在恒定的时间复杂度内将项目插入已排序的链表中。但您可以在O(logn)时间复杂度中插入项
实际上,在已排序的链表中是不可能的,但您可以在未排序的链表中插入一个项目,该项目的固定时间为Big-O(1) 还可以看到这个…
不可能在时间复杂度为O(1)的排序链表中插入项目。只能在时间复杂度为O(1)的未排序链表中插入项。
您可以通过此链接了解更多关于时间复杂性的信息您不能。如果你能做到这一点,你将彻底改变排序,你可以从一个空链表开始,根据定义,它将被排序,添加第一个项目,仍然排序,然后继续,这意味着排序项目将是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++;
}