我一直在思考一个程序逻辑,但我不能对我的问题得出结论。
在这里,我实现了对固定数组的堆栈和队列操作。
int A[1000];
int size=1000;
int top;
int front;
int rear;
bool StackIsEmpty()
{
return (top==0);
}
bool StackPush( int x )
{
if ( top >= size ) return false;
A[top++] = x;
return true;
}
int StackTop( )
{
return A[top-1];
}
bool StackPop()
{
if ( top <= 0 ) return false;
A[--top] = 0;
return true;
}
bool QueueIsEmpty()
{
return (front==rear);
}
bool QueuePush( int x )
{
if ( rear >= size ) return false;
A[rear++] = x;
return true;
}
int QueueFront( )
{
return A[front];
}
bool QueuePop()
{
if ( front >= rear ) return false;
A[front++] = 0;
return true;
}假定(或明显)堆栈的底部和队列的前端指向相同的位置,反之亦然(堆栈的顶部指向队列的后端的相同位置)。
例如,整数1和2按照写入顺序在数组中。如果我调用StackPop(),整数2将被弹出,如果我调用QueuePop(),整数1将被弹出。
我的问题是,如果我在同一个数组上同时执行堆栈和队列操作,我不知道会发生什么。上面的例子很容易解决,因为只涉及两个值。但是如果涉及2个以上的值呢?
例如,如果我调用
StackPush(1);
QueuePush(2);
QueuePush(4);
StackPop();
StackPush(5);
QueuePop();从最终数组开始,按底部(前面)的顺序返回什么值?
我知道如果我编写一个程序,我会得到一个快速的回答。但我问这个的原因是因为我想听一个人的逻辑解释,而不是计算机。
添加:对于第二个示例,我有4个候选者。25 12 24 45或者从这里完全没有答案。
发布于 2010-04-19 00:16:36
为什么要在同一阵列上实现这些功能?如果这样做,一个结构的元素可能会覆盖另一个结构的元素。
您实际上有一个(类似的) deque,但是手工运行您的程序是困难的,因为您对两个数据结构有不同的指针,但它们只有一个数组。
假定(或明显)堆栈的底部和队列的前端指向相同的位置,反之亦然(堆栈的顶部指向队列的后端的相同位置)。
好吧,在这种情况下可以,但你应该只使用一个Deque,这在这个假设下是不起作用的。或者对队列和堆栈使用不同的向量。
一般说来,人类就是这样做的,而计算机就是这样做的。只需让您的程序在每次操作后打印A的内容,并且它应该足够符合逻辑。
https://stackoverflow.com/questions/2662896
复制相似问题