我試圖讓StackMin,Pop和Push中的最小值都是Θ(1)
。 我的代碼不能正常工作......這是我的嘗試:分鐘堆棧中的最小值
typedef struct{
int top;
int entry[1000];
int small;
} Stack;
void Pop(int *e,Stack *ps){
*e=ps->entry[--ps->top];
}
void Push(int e,Stack *ps){
ps->entry[ps->top++]=e;
}
int StackMin(Stack *ps){
ps->small=ps->entry[ps->top];
while(!StackEmpty(ps)){
int *e;
*e=ps->entry[--ps->top];
if(ps->small >= *e){
ps->small = *e;
}
}
return ps->small;
}
什麼不行?編譯器會給你錯誤嗎?你必須提供比這更多的信息。 –
「小」訪問未初始化的內存,你關了一個。 –
推,流行音樂和民不能都是'Theta(1)',除非你正在談論一個歷史分鐘。如果你存儲一個最小值,你可以在push和StackMin上得到'O(1)',但是如果你彈出一個等於min的值,你將不得不重新計算min - 一個線性操作。你可以存儲排序的數組,使Min計算爲'O(1)',但是推送和彈出'O(n)' - 你可以將它存儲爲排序的,但是有一個引用數組值的棧,和min都顯示爲'O(1)',但由於push和pop違反了排序後的存儲,所以在修復損壞時,它們實際上就是'O(n)'。 – FrankieTheKneeMan