数据结构--循环链表,魔术师发牌问题
2017-07-18 09:22
260 查看
问题描述:利用13张黑牌,预先将牌摆好后叠放在一起,最上面那张为1,魔术师数1,翻过来是黑桃A,第二次数1,2,翻过来是黑桃2,依次类推,将13张牌全部翻出,准确无误。
问题:最开始牌是怎么排的?
利用循环链表解决。
问题:最开始牌是怎么排的?
利用循环链表解决。
#include <stdio.h> #include<stdlib.h> #define CardNumber 13 /*定义链表结构*/ typedef struct node { int data; struct node *next; }sqlist, *linklist; /*创建循环链表*/ linklist CreateLinkList() { linklist head = NULL; linklist s, r; int i; r = head; for (i = 1; i <= CardNumber; i++) { s = (linklist)malloc(sizeof(linklist)); s->data = 0; //初始化内容都为0 if (head == NULL) head = s; else r->next = s; r = s; } r->next = head; return head; } /*放牌顺序计算*/ void Magic(linklist head) { linklist p; int j; int CountNumber = 2; p = head; p->data = 1; //第一张牌放1 while (1) { for (j = 0; j < CountNumber; j++)//根据CountNumber,移动指针,依次为2,3... { p = p->next; if (p->data != 0) //该位置如果有牌的话,则下一个位置 { p->next; j--; } } if (p->data == 0) { p->data = CountNumber; CountNumber++; if (CountNumber == 14) break; } } } int main() { linklist p; int i; p = CreateLinkList(); Magic(p); printf("按如下顺序排序:\n"); for (i = 0; i < CardNumber; i++) { printf("黑桃%d\n", p->data); p = p->next; } return 0; }运行结果:
相关文章推荐
- C语言数据结构之用循环链表解决魔术师发牌问题
- 【数据结构】一个关于用快慢指针处理循环链表的有趣小问题
- 用双向循环链表解决数据结构中的选美比赛问题。
- 数据结构:循环链表求解约瑟夫环问题
- 【数据结构和算法分析】循环链表及约瑟夫问题
- 数据结构学习中的简单问题(二):用循环链表求解简单约瑟夫问题
- 数据结构之线性表——约瑟夫环问题(循环链表的应用)
- 数据结构学习笔记(3)---循环链表(约瑟夫环问题)
- 线性表15|魔术师发牌问题和拉丁方阵 - 数据结构和算法20
- 线性表15|魔术师发牌问题和拉丁方阵 - 数据结构和算法20
- 数据结构学习笔记(二) 链表之用循环链表解决约瑟夫问题
- 循环链表解决魔术师发牌问题
- 线性表15|魔术师发牌问题和拉丁方阵 – 数据结构和算法20
- 魔术师发牌问题(数据结构)
- 小猪的数据结构辅助教程——2.6 经典例子:魔术师发牌问题和拉丁方阵问题
- 【数据结构】循环链表解决约瑟夫环问题
- 企业级数据结构-循环链表(约瑟夫问题)
- POJ 3750 小孩报数问题(模拟/数据结构—循环链表)
- [置顶] 循环链表:魔术师发牌问题
- 数据结构---线性表----循环链表和双向链表