2015-02-12 227 views
0

我在寫一個使用DFS算法和堆棧解決迷宮的程序。我正在考慮將用於結束的路徑座標存儲到包含整數x,y座標的結構中,然後將該結構推送到堆棧上以執行其他指令(打印,彈出等)。是否可以將結構存儲到鏈接列表中?

我已經搜遍遍了,還沒有找到任何有用的東西。所以我繼續設置它,但我得到一個關於類型兼容性的錯誤,因爲我有我的節點數據爲一個int,但我試圖把一個結構。作爲鏈接列表的新手我只看到數據爲int或char。最後,甚至有可能做我想做的事情?如果不是,你能建議一種將x,y座標傳遞到堆棧的方法嗎?先謝謝你。

下面是我的代碼示例,在哪裏可以節省空間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; 
} 
+5

變化'成員INT data'到'COORD data'以正確的方式,和'對 - >數據= a1'到'對 - >數據= * a1' 。 – 2015-02-12 07:49:27

+0

...或者將int data作爲一個void * data代替一個通用的方法...在你的'pull'函數中,你明確地必須強制轉換'(COORD *)(p-> data)'然後儘管回到正確的指針類型... – 2015-02-12 08:25:13

回答

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

因此,通過聲明數據爲'COORD',我可以像使用該結構的實例一樣使用它? – Rbutler93 2015-02-12 08:35:35

+0

自己的代碼塊不是很豐富。請解釋你所展示的代碼是幹什麼的,你爲什麼選擇這樣寫,以及你期望它如何工作。 – 2015-02-12 08:37:05

+0

請注意'COORD'必須在'NODE'之前定義 - 除非結構定義被重新排序,否則顯示的代碼將不會編譯。 – 2015-02-12 08:38:07

0

由於@barak馬諾斯提到你應該把COORD結構NODE前和更改int dataCOORD data和使用p->data = *a1

相關問題