我正在编写一个使用DFS算法和堆栈来解决迷宫的程序。我正在考虑将用于结束的路径的坐标存储到包含整数x
,y
的结构的坐标上,然后将该结构推送到堆栈上以执行其他指令(print,流行等。)。
我已经搜遍过,还没有找到任何有用的东西。所以我继续进行设置,但我收到了关于类型兼容性的错误,因为我将节点数据作为int,但我试图放入一个结构。作为链接列表的新手,我只看到数据为int或char。最后,甚至可以做我想做的事情吗?如果没有,你能否建议一种将x
,y
坐标传递到堆栈的方法?先感谢您。
以下是我的代码示例,保存空间的位置a1
是COORD
的一个实例,并且列表已初始化以及迷宫等。
typedef struct node {
int data; /* Value or data stored in node*/
struct node *pNext; /* Reference to the next node address */
} NODE;
/*Structure declares pointers for front and back of the list*/
typedef struct LIST {
NODE *front;
NODE *back;
} LIST;
/* Structure to pass multiple values onto stack */
typedef struct COORD{
int x;
int y;
}COORD;
/*Example of one of the functions */
void lst_push_front(LIST *l, COORD *a1) {
NODE *p = malloc(sizeof(NODE));
p->data = a1;
p->pNext = l->front;
l->front = p;
if(l->back == NULL) // was empty, now one elem
l->back = p;
}
答案 0 :(得分:3)
检查以下代码。
由于COORD是一种结构,您可以将其包含在另一个结构中,如下面的代码所示。
还要确保结构的顺序正确。
p->data.x
是访问结构COORD
#include <stdio.h>
/* Structure to pass multiple values onto stack */
typedef struct COORD{
int x;
int y;
}COORD;
typedef struct node {
COORD data; /* --> Changes done here */
struct node *pNext; /* Reference to the next node address */
} NODE;
/*Structure declares pointers for front and back of the list*/
typedef struct LIST {
NODE *front;
NODE *back;
} LIST;
void func(COORD *q)
{
NODE *p = malloc(sizeof(NODE));
p->data.x = q->x;
p->data.y = q->y;
printf("%d %d",p->data.x,p->data.y);
free(p);
}
int main(void) {
COORD *q = malloc(sizeof(COORD));
q->x = 20;
q->y = 30;
func(q);
free(q);
return 0;
}
答案 1 :(得分:0)
正如@barak manos提到的那样,您应该在COORD
之前加上NODE
结构,并将int data
更改为COORD data
并使用p->data = *a1