首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在同一数组上进行堆栈和队列操作

在同一数组上进行堆栈和队列操作
EN

Stack Overflow用户
提问于 2010-04-19 00:07:12
回答 4查看 2.8K关注 0票数 0

我一直在思考一个程序逻辑,但我不能对我的问题得出结论。

在这里,我实现了对固定数组的堆栈和队列操作。

代码语言:javascript
运行
复制
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个以上的值呢?

例如,如果我调用

代码语言:javascript
运行
复制
StackPush(1);
QueuePush(2);
QueuePush(4);
StackPop();
StackPush(5);
QueuePop();

从最终数组开始,按底部(前面)的顺序返回什么值?

我知道如果我编写一个程序,我会得到一个快速的回答。但我问这个的原因是因为我想听一个人的逻辑解释,而不是计算机。

添加:对于第二个示例,我有4个候选者。25 12 24 45或者从这里完全没有答案。

EN

Stack Overflow用户

发布于 2010-04-19 00:16:36

为什么要在同一阵列上实现这些功能?如果这样做,一个结构的元素可能会覆盖另一个结构的元素。

您实际上有一个(类似的) deque,但是手工运行您的程序是困难的,因为您对两个数据结构有不同的指针,但它们只有一个数组。

假定(或明显)堆栈的底部和队列的前端指向相同的位置,反之亦然(堆栈的顶部指向队列的后端的相同位置)。

好吧,在这种情况下可以,但你应该只使用一个Deque,这在这个假设下是不起作用的。或者对队列和堆栈使用不同的向量。

一般说来,人类就是这样做的,而计算机就是这样做的。只需让您的程序在每次操作后打印A的内容,并且它应该足够符合逻辑。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2662896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档