是否可以将结构存储到链表中?

时间:2015-02-12 07:46:13

标签: c struct stack maze

我正在编写一个使用DFS算法和堆栈来解决迷宫的程序。我正在考虑将用于结束的路径的坐标存储到包含整数xy的结构的坐标上,然后将该结构推送到堆栈上以执行其他指令(print,流行等。)。

我已经搜遍过,还没有找到任何有用的东西。所以我继续进行设置,但我收到了关于类型兼容性的错误,因为我将节点数据作为int,但我试图放入一个结构。作为链接列表的新手,我只看到数据为int或char。最后,甚至可以做我想做的事情吗?如果没有,你能否建议一种将xy坐标传递到堆栈的方法?先感谢您。

以下是我的代码示例,保存空间的位置a1COORD的一个实例,并且列表已初始化以及迷宫等。

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;
}

2 个答案:

答案 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