Я думал о логике программы, но не могу сделать вывод о своей проблеме.
Здесь я реализовал операции стека и очереди для фиксированного массива.
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.
Моя проблема в том, что я не знаю, что произойдет, если я выполняю операции стека и очереди в одном массиве. Вышеприведенный пример легко разобрать, потому что задействованы только два значения. Но что, если задействовано более двух значений?
Например, если я позвоню
StackPush(1);
QueuePush(2);
QueuePush(4);
StackPop();
StackPush(5);
QueuePop();
какие значения будут возвращены в порядке нижнего (переднего) из окончательного массива?
Я знаю, что если я закодирую программу, я получу быстрый ответ. Но я спрашиваю об этом потому, что хочу услышать логические объяснения от человека, а не от компьютера.
ДОБАВЛЕНО:
Для второго примера у меня есть 4 кандидата.
25
12
24
45
или вообще никакого ответа.