void push(const Type& e){
if (size() == CAP) {
CAP = CAP + 100;
Type * Snew = new Type[CAP];
for (int i = 0; i < CAP - 100; i++){
Snew[i] = S[i];
}
delete[] S;
S = Snew;
}
TOP++;
S[TOP] = e;
}
此算法的时间复杂度是什么?为什么?我正在看它,希望我没错,但我认为由于存在单个for循环,它具有线性时间(O(n))复杂度,并且我认为循环外的所有其他操作都是恒定时间操作。
答案 0 :(得分:0)
它的O(n),好吧。取决于new的实现,也可能是O(n)而不是常量(如果它正在清除mem或其他东西),但仍然使整个事物O(n)。
答案 1 :(得分:0)
复杂性为O(n)。但是,请注意,大多数堆栈实现都会使数组的大小加倍,而不是将其增加一个固定的数量,以实现分摊的常量时间。有关讨论,请参阅Constant Amortized Time。