【发布时间】:2020-07-05 21:55:48
【问题描述】:
我有这个显示队列的迭代函数:
void displayQueue(queue *Q){
int temp;
while(!isEmpty(Q)){
temp = dequeue(Q);
printf("%d -> ", temp);
displayQueue(Q);
enqueue(Q, temp);
}
reverse(Q);
}
我想通过删除 while 循环使其完全递归,这是我目前得到的:
void displayQueue(queue *Q){
if(isEmpty(Q)) return;
int temp = dequeue(Q);
printf("%d -> ", temp);
displayQueue(Q);
enqueue(Q, temp);
}
问题是何时调用“reverse(Q)”函数,该函数必须在函数返回时在打印结束时调用,但此时 Q 为空,因此它不会被反转(打印队列导致其反转)
这是我的队列结构:
typedef struct queue{
unsigned capacity;
int size;
int front;
int rear;
int *array;
}queue;
【问题讨论】:
-
您能否展示一下您的
queue结构?仅仅为了打印而改变队列并不是最好的方法。通常显示函数应该只是遍历而不是修改。但是没有看到queue结构就不能给出更具体的指导。 -
@user13121591 "问题是什么时候调用"reverse(Q)" " - 有什么问题?
-
@kaylum 我添加了队列的结构,作为一个队列并将其视为我们只能访问头部中的元素
-
@VladFromMoscow 问题是 reverse(Q) 应该在函数返回之前调用,但此时 Q 是空的,所以它不会被反转
-
@Armali
enqueue在队列后面添加一个元素,dequeue在队列前面删除元素
标签: c recursion queue function-definition