C如何访问结构中的链表

C如何访问结构中的链表,c,C,我试图在调用newGame时在drawPile中创建一副牌(特定的牌作为参数) 我有4个链表来存储卡片(抽牌堆、弃牌堆、玩家1的手牌和玩家2的手牌) My_game结构将存储给定时间内我的游戏状态(例如,drawPile、discardPile和player1,2手中的牌) 我很难理解如何在struct_游戏中使用drawPile链表。创建游戏时,我应该如何为drawPile、discardPile等分配内存?因为我相信我现在在newGame中所做的是完全错误的 如有任何建议或提示,将不胜感激

我试图在调用newGame时在drawPile中创建一副牌(特定的牌作为参数)

我有4个链表来存储卡片(抽牌堆、弃牌堆、玩家1的手牌和玩家2的手牌)

My_game结构将存储给定时间内我的游戏状态(例如,drawPile、discardPile和player1,2手中的牌)

我很难理解如何在struct_游戏中使用drawPile链表。创建游戏时,我应该如何为drawPile、discardPile等分配内存?因为我相信我现在在newGame中所做的是完全错误的

如有任何建议或提示,将不胜感激

typedef enum {RED,BLACK} color;
typedef enum {HEARTS,DIAMONDS,CLUBS,SPADES} suit;
typedef enum {ONE,TWO,THREE,FOUR} value;

typedef struct drawPile{
    enum color color;
    enum suit suit;
    enum value value;
    struct drawPile *next;
}*drawPile; 
我有点困惑,把*放在抽屉前有什么区别

typedef struct discardPile{
    enum color color;
    enum suit suit;
    enum value value;
    struct discardPile *next;
};

typedef struct player1Hand{
    enum color color;
    enum suit suit;
    enum value value;
    struct player1Hand *next;
};

typedef struct player2Hand{
    enum color color;
    enum suit suit;
    enum value value;
    struct player2Hand *next;
};

typedef struct _game{
    drawPile game_drawPile;
    discardPile game_discardPile;
    player1Hand game_player1Hand;
    player2Hand game_player2Hand;
}Game;

Game newGame(int deckSize, value values[], color colors[], suit suits[]){
    Game nGame;
    for(int i = 0; i < deckSize; i++){
        nGame->drawPile.value = value[i];
        nGame->drawPile.color = colors[i];
        nGame->drawPile.suit = suits[i];

    }

}

我只粘贴了代码段,如果需要更多信息,请告诉我。

首先,您可以对所有链接列表使用相同的结构

struct Card {
    enum color color;
    enum suit suit;
    enum value value;
};

struct CardList {
    struct Card *card;
    struct CardList *next;
};
然后,您可以编写向列表中添加/从列表中删除卡的函数:

CardList *add(CardList **list, Card *card);
在新游戏中:

Game *newGame(int deckSize, value values[], color colors[], suit suits[]){
    Game *nGame = (Game*) malloc(sizeof(Game));
    for(int i = 0; i < deckSize; i++){
        Card* card = (Card*) malloc(sizeof(Card));
        ... assign variable
        add(&game->drawPile, card);
    }

    return nGame;
}
Game*newGame(int deckSize,value[],color colors[],套装[])){
Game*nGame=(Game*)malloc(sizeof(Game));
对于(int i=0;i抽堆、卡片);
}
返回nGame;
}

discardPile游戏\u discardPile
没有定义为
discardPile
的类型。您有一个
struct discardPile
但不是类型。@rishikshraje但typedef没有将其定义为类型吗?我是新手C@franklinhe-否,您需要定义类型。有关更多信息,请参阅或阅读好的C语言书。此外,将类型定义为
*drawPile
也不是一个好主意。看见您要做的是将
drawpile
定义为指向结构的指针,而不是结构。这会导致代码后面出现问题。@rishikshraje啊,这很有道理,谢谢你可能相关:对于c,你不需要我有点困惑,因为OP mixed->things from c++有没有办法不创建新的add函数?因为我被要求实现一个抽象数据类型。在这种情况下,如何分配变量?我是否为结构卡分配内存,然后直接将卡的值分配给nGame->drawPile->card.color(.value,.suit等)?
Game *newGame(int deckSize, value values[], color colors[], suit suits[]){
    Game *nGame = (Game*) malloc(sizeof(Game));
    for(int i = 0; i < deckSize; i++){
        Card* card = (Card*) malloc(sizeof(Card));
        ... assign variable
        add(&game->drawPile, card);
    }

    return nGame;
}