【发布时间】:2015-12-14 21:09:40
【问题描述】:
这是一个数据结构问题,也是关于实现的。集合通常使用 BST 实现,但我的教授希望我们知道如何在仅给出有限选项的情况下实现某些数据结构。所以他希望我们能够理解如何只使用一个数组来创建一个集合。
使用标准(未排序)数组我了解实现/复杂性...
void add(Student[] arr, Student findstu)
{
Student stu = new Student();
int i=0;
boolean found = false;
while(stu!=NULL)
{
stu = arr[i++];
if (stu==findstu)
{
found = true;
}
}
if (found==false)
{
arr[i+1] = findstu;
}
}
添加/删除/包含几乎是相同的代码,都将具有第一个 while 循环,这将使它们成为 O(n)。
但是如果我们使用排序数组,为什么包含 O(lgn) 和添加/删除 O(n)?
【问题讨论】:
-
那个 sn-p 无效(不会编译),即使修复也不是最理想的
-
@Amit 你能详细说明你在说什么吗?这里的想法不是拥有最好的运行时......只需在给定的约束条件下实现一些东西
-
Student stu = new Student();是语法错误,因为stu不是指针。这是次优的,因为您在不需要它的情况下分配和初始化对象 -
这也是内存泄漏,因为你在堆上初始化了一个
Student对象并且永远不会删除它 -
我可以直接说
Student stu;,这样会更合适吧?我不需要在堆上创建对象