将删除的节点与要插入的下一个节点链接起来后的无限链表

时间:2016-11-21 04:04:57

标签: c pointers linked-list queue

我正在尝试从队列中删除一个项目,然后将要插入的下一个项目链接到已删除的项目,直到我的队列为空或删除的项目符合我的条件。这样,当队列结束时,我知道哪些项目链接到我的终点。现在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);
}

0 个答案:

没有答案