我正在尝试获得堆栈中的最小值,其中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;
}
答案 0 :(得分:2)
您需要有两个堆栈才能执行此操作。一个堆栈可以按顺序包含最小值,每次调用最小值时都会更新此堆栈。尝试自己找出算法。
答案 1 :(得分:2)
这些行中不需要指针:
int *e;
*e=ps->entry[--ps->top];
if(ps->small >= *e){
ps->small = *e;
}
将它们更改为:
int e = ps->entry[--ps->top];
if(ps->small >= e){
ps->small = e;
}
答案 2 :(得分:1)
“不起作用”对描述没有帮助......但无论如何,这看起来有问题:
int *e;
*e=ps->entry[--ps->top];
if(ps->small >= *e){
ps->small = *e;
}
问题是,你已经声明了一个指针(当前没有指向它 - 它是未初始化的),然后你将值写入它指向的(无效)位置。
如果代码偶然没有崩溃,而您的问题与算法有关,则另一位用户已经发布了相关答案。