问题描写叙述:

魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们依照一定的顺序叠放好(有花色的一面朝下)。魔术表演过程为:一開始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最以下,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最以下,将第三张牌翻过来正好是黑桃3;……直到将全部的牌都翻出来为止。问原来牌的顺序是怎样的。

接下来通过c语言简单实现:

#include "stdafx.h"
#include "stdlib.h"//声明一个单链表结构体
typedef struct LNode {int data;     //数据域,数据域的类型为泛型(ElementType)LNode *next;   //指针域,指向下一个node的地址
}LNode, *LinkList;  //声明2个结构体别名(结构体别名和结构体指针别名),方便在外部直接通过别名定义该结构体类型的变量
/*
魔术师发牌问题:循环单链表
*/
/*
初始化循环单链表n个节点数据为0
*/
LinkList initList(int n) {if (n < 1) {return NULL;}LNode *s;LNode *p;p = NULL;LNode *r = NULL;int j = 1;while (j<=n){s = (LinkList)malloc(sizeof(LNode));s->data = 0;if (p == NULL) {p =r = s;}else{r->next = s;r = s;}j++;}r->next = p;return p;
}/*
根据算法规则对相应位置进行数据填充
*/
LinkList magic(int n) {LNode *L;LinkList p =initList(n);L = p;int j = 1;while (true){    //第一个节点数据为1if (j == 1) {p->data = j;j++;continue;}int k = j;//临时存储节点需要偏移的次数for (int i = 1; i <= k; i++){        p = p->next;if (p->data != 0) {//判断该节点是否已有数据,如果有则需要跳过该节点即多向后移动一次k++;}}p->data = j;//赋值j++;if (j > n) {break;}}return L;
}

主函数:

void main() {int n = 10;LinkList L = magic(n);int j = 1;while (L!=NULL){printf_s("%d\t", L->data);if (j < n) {L = L->next;}else{break;}j++;}
}

输出结果:

以上只是我个人设计的一种实现,如果发散思维肯定还有很多种写法呢!

数据结构-循环单链表之魔术师发牌问题相关推荐

  1. 数据结构-循环单链表之约瑟夫问题

    约瑟夫问题的由来: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...

  2. DHU数据结构-循环单链表-ADT应用-圆桌问题

    目录 1.题目 2.题解 3.代码实现 1.题目 圆桌问题 作者: 冯向阳 时间限制: 1S 章节: DS:数组和链表 问题描述 : 目的:使用C++模板设计循环链表的抽象数据类型(ADT).并在此基 ...

  3. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

  4. 【数据结构】循环单链表的实现(C语言)

    循环单链表应掌握以下基本操作: 1.建立一个空的循环单链表. 2.获得循环单链表的最后一个结点的位置. 3.输出循环单链表中各结点的值. 4.在循环单链表中查找值为x的结点. 5.在循环单链表中第i个 ...

  5. 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: 循环单链表的实现,和上一篇文章单链表的实现大致同样点击打开链接,略有差别: 1:循环推断的条件不再是s == NULL或者s->next == NU ...

  6. (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表

    文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...

  7. 数据结构之python实现循环单链表实例

    题目如下: python实现: import random class CLNode:def __init__(self,name):self.name = nameself.next = None ...

  8. 王道书 P41 T19(循环单链表实现)

    /*** 用链表实现 王道P41 T19** ①算法思想:* 不断地从 L 中找到最小值输出并删除,* 直到 L -> NEXT = L 结束.** ②数据结构:* typedef struct ...

  9. 数据结构C语言版:魔术师发牌问题

    数据结构C语言版:魔术师发牌问题 故事背景 一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下.说:"我不看牌,只数一数就能知道每张牌是什么?"魔术师口中念一, ...

最新文章

  1. 《乐高EV3机器人搭建与编程》——2.2 颜色设计
  2. linux或Jetson nano上安装torchvision或安装pillow报错:The headers or library files could not be found for jpeg
  3. 经典C语言程序100例之十
  4. 安卓期末项目源码_手机随时随地写Python,还可以开发安卓APP,太厉害了!
  5. mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...
  6. PAT乙级 1004 成绩排名
  7. Android——基于监听器的事件处理(转)
  8. 2022年2月Python小屋编程比赛获奖名单
  9. 什么时候使用Task.Delay,什么时候使用Thread.Sleep?
  10. 关于 HTTP 长连接
  11. 如何举报YouTube视频和评论
  12. w7计算机虚拟内存设置,win7虚拟内存怎么设置最好
  13. 安卓Android百度输入法皮肤-疯狂码字的快乐-《Write 2022升级版》
  14. bp神经网络训练过程matlab,bp神经网络训练时间
  15. Intel SGX入门教程(二)在windows环境搭建intel sgx环境并运行helloworld程序
  16. perl脚本语言学习
  17. python统计小说人物出现次数_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。...
  18. vue3 vue-seamless-scroll
  19. 《运筹学基础》的思维导图
  20. 图像处理——人脸黑头检测+用户界面

热门文章

  1. vue模板html,VueJS模板
  2. RGB(FFFFFF)转255:255:255
  3. iOS 开发和部署过程概述
  4. Android Github 资源目录
  5. 接口应用练习题(用接口的方式实现某网上商城的网上支付功能)
  6. [04-05]box框模型(Box Model)定义了元素框处理元素内容、内边距、边框和外边距的方式...
  7. UE4 PostProcessVolume 蓝图操作后期框
  8. iOS截取特定的字符串(正则匹配)
  9. IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
  10. Redis--keys的通用操作