📅  最后修改于: 2023-12-03 15:26:04.216000             🧑  作者: Mango
题目描述:
给定一个计算机程序,该程序模拟队列的添加和删除操作。现在你需要写一个函数,判断该程序是否正确。队列采用数组的形式实现,队列的大小为10。
函数原型:bool isQueueCorrect(int N, int program[])
输入参数:
输出参数:
bool isQueueCorrect(int N, int program[]) {
int queue[11] = {0}; // 队列数组,从queue[1]开始存放队列元素
int head = 1, tail = 0; // 队列头和尾指针
int index = 0; // 当前执行的指令
while (index < N) { // 循环执行指令
if (program[index] > 0) { // 添加操作
if (tail - head + 1 == 10) { // 如果队列已满
return false; // 返回false
}
tail++; // 队列尾指针加1
queue[tail] = program[index]; // 添加元素
} else { // 删除操作
if (tail - head + 1 == 0) { // 如果队列为空
return false; // 返回false
}
head++; // 队列头指针加1
}
index++; // 指令指针加1
}
if (tail - head + 1 == 0) { // 如果队列为空
return true; // 返回true
} else {
return false; // 返回false
}
}
给定了一个长度为N的程序列表program,program中每一个元素可以为正数或负数,正数表示添加元素到队列中,负数表示从队列中删除元素,题目要求判断执行该程序后队列中是否还存在元素。
该程序中实现了一个队列数据结构,队列采用数组方式存储,队列的队头和队尾指针用两个变量head和tail表示,队列满时tail等于队列大小10,队列空时head等于tail加1。程序中判断队列是否为空或已满,如果队列已满则返回false,如果队列为空且程序已执行完,则返回true。
int N = 10;
int program[10] = {3, -1, 2, -4, 5, 6, -8, 7, 1, -9};
bool res = isQueueCorrect(N, program);
cout << res << endl; // 输出1