我正在尝试从队列中删除一个项目,然后将要插入的下一个项目链接到已删除的项目,直到我的队列为空或删除的项目符合我的条件。这样,当队列结束时,我知道哪些项目链接到我的终点。现在q里面有一个ItemType。 ItemType矩阵是包含ItemType值及其坐标的矩阵。 while循环只是连续打印“|”的坐标是在。
void enQueue(Queue *q, int rows, int cols, ItemType matrix[][cols]){
int n,m;
ItemType *temp;
temp = (ItemType *)malloc(sizeof(ItemType));
Remove(q, temp);
while(temp->cell != '|'){
n = temp->x;
m = temp->y;
enQueueLeft(q, cols, matrix, n, m, &temp);
enQueueUp(q, cols, matrix, n, m, &temp);
enQueueRight(q, cols, matrix, n, m, &temp);
enQueueDown(q, rows, cols, matrix, n, m, &temp);
if(!Empty(q))
Remove(q, temp);
else{
printf("FAILURE\n");
exit(EXIT_FAILURE);
}
}
while(temp != NULL){
printf("[%d, %d]", temp->x, temp->y);
temp = temp->link;
}
printf("\n");
}
所有enQueue函数在不同方向上都是相似的,这是一个例子,
void enQueueDown(Queue *q, int rows, int cols, ItemType matrix[][cols], int n, int m, ItemType **a){
matrix[n+1][m].record = 1;
ItemType *temp = (ItemType *)malloc(sizeof(ItemType));
*temp = matrix[n+1][m];
temp->link = *a;
Insert(*temp, q);
}