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