C 如何按花色和价值创建有序的卡片链表
我有一项任务,要制作一个按花色和价值排序的卡片节点链表。卡片结构:C 如何按花色和价值创建有序的卡片链表,c,struct,linked-list,nodes,C,Struct,Linked List,Nodes,我有一项任务,要制作一个按花色和价值排序的卡片节点链表。卡片结构: struct card { int value; char suit; } struct CNode { card * card1; CNode * CNode->next; } 或者类似的东西;基本上有一个卡片结构和一个链表(不确定这是否就是我拥有的,但我拥有的是100%正确的,所以不要评论我的结构)。下面是创建列表的代码:
struct card {
int value;
char suit;
}
struct CNode {
card * card1;
CNode * CNode->next;
}
或者类似的东西;基本上有一个卡片结构和一个链表(不确定这是否就是我拥有的,但我拥有的是100%正确的,所以不要评论我的结构)。下面是创建列表的代码:
void addCard(Player * player1, Card * card1) {
CNode * ins_node = malloc(sizeof(CNode));
ins_node->card = card1;
ins_node->next = NULL;
if (player1->hand == NULL);
player1->hand = ins_node;
return;
else {
CNode * temp = player1->hand;
while (temp->next != NULL) {
if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
//if (ins_node->card->value > temp->card->value) {
ins_node->next = temp->next;
temp->next = ins_node;
return;
// }
}
}
temp = temp->next;
}
temp->next = ins_node;
}
让我们假装所有的格式都很好。现在,我不明白的是,为什么它不能满足我的需要。我已经为此工作了几个小时,没有任何进展。如果您能帮助/修改现有代码,我将不胜感激。目前,这将输出西服订购的卡,但该值会把一切搞糟。如果你看到任何简单的解决方法,请告诉我 在我看来,你进入了一个无限循环:
while (temp != NULL) {
if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
if (ins_node->card->value > temp->card->value) {
CNode * prev = temp;
temp = temp->next;
prev->next = ins_node;
ins_node->next = temp;
return;
}
}
temp = temp->next; //move on no matter match or not.
}
据
struct card {
int value;
char suit;
}
suit
只是一个char
,您无法使用来比较char
s
if (strcmp(temp->card->suit, ins_node->card->suit) == 0){
如果您没有
#包括,则此错误可能不会被注意到。或者您没有显示struct card
的真正定义;这正是发生的事情。我修复了无限循环,并对其进行了一些修改,使套装都能很好地工作。但是,我无法订购这些卡。应编辑原始帖子以显示我最近的修复。这将输出给定玩家手上的所有牌,按花色排序,但不按值排序。@Eric,在这个循环中,只有当牌与玩家的花色相同时,才插入。这是你需要解决的问题:那些不同花色的卡片会发生什么情况,在哪里插入?我在底部有。如果卡片与任何套装不匹配,则会添加到末尾。到目前为止,假设一张15张牌的牌,我已经按西装分类了。例如,我有4个圆,后面是5个正方形,后面是3个钻石,后面是2个三角形。然而,我无法按价值订购每件西装。我的目标是将其设置为降序或升序值,并按套装(套装不是固定的个人对个人的顺序)进行细分。当我取消注释该部分时,我会将所有内容排序,但每个套装的第一个节点除外。