数据结构-循环单链表之魔术师发牌问题
问题描写叙述:
魔术师手中有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++;}
}
输出结果:
以上只是我个人设计的一种实现,如果发散思维肯定还有很多种写法呢!
数据结构-循环单链表之魔术师发牌问题相关推荐
- 数据结构-循环单链表之约瑟夫问题
约瑟夫问题的由来: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...
- DHU数据结构-循环单链表-ADT应用-圆桌问题
目录 1.题目 2.题解 3.代码实现 1.题目 圆桌问题 作者: 冯向阳 时间限制: 1S 章节: DS:数组和链表 问题描述 : 目的:使用C++模板设计循环链表的抽象数据类型(ADT).并在此基 ...
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
- 【数据结构】循环单链表的实现(C语言)
循环单链表应掌握以下基本操作: 1.建立一个空的循环单链表. 2.获得循环单链表的最后一个结点的位置. 3.输出循环单链表中各结点的值. 4.在循环单链表中查找值为x的结点. 5.在循环单链表中第i个 ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: 循环单链表的实现,和上一篇文章单链表的实现大致同样点击打开链接,略有差别: 1:循环推断的条件不再是s == NULL或者s->next == NU ...
- (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表
文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...
- 数据结构之python实现循环单链表实例
题目如下: python实现: import random class CLNode:def __init__(self,name):self.name = nameself.next = None ...
- 王道书 P41 T19(循环单链表实现)
/*** 用链表实现 王道P41 T19** ①算法思想:* 不断地从 L 中找到最小值输出并删除,* 直到 L -> NEXT = L 结束.** ②数据结构:* typedef struct ...
- 数据结构C语言版:魔术师发牌问题
数据结构C语言版:魔术师发牌问题 故事背景 一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下.说:"我不看牌,只数一数就能知道每张牌是什么?"魔术师口中念一, ...
最新文章
- 《乐高EV3机器人搭建与编程》——2.2 颜色设计
- linux或Jetson nano上安装torchvision或安装pillow报错:The headers or library files could not be found for jpeg
- 经典C语言程序100例之十
- 安卓期末项目源码_手机随时随地写Python,还可以开发安卓APP,太厉害了!
- mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...
- PAT乙级 1004 成绩排名
- Android——基于监听器的事件处理(转)
- 2022年2月Python小屋编程比赛获奖名单
- 什么时候使用Task.Delay,什么时候使用Thread.Sleep?
- 关于 HTTP 长连接
- 如何举报YouTube视频和评论
- w7计算机虚拟内存设置,win7虚拟内存怎么设置最好
- 安卓Android百度输入法皮肤-疯狂码字的快乐-《Write 2022升级版》
- bp神经网络训练过程matlab,bp神经网络训练时间
- Intel SGX入门教程(二)在windows环境搭建intel sgx环境并运行helloworld程序
- perl脚本语言学习
- python统计小说人物出现次数_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。...
- vue3 vue-seamless-scroll
- 《运筹学基础》的思维导图
- 图像处理——人脸黑头检测+用户界面
热门文章
- vue模板html,VueJS模板
- RGB(FFFFFF)转255:255:255
- iOS 开发和部署过程概述
- Android Github 资源目录
- 接口应用练习题(用接口的方式实现某网上商城的网上支付功能)
- [04-05]box框模型(Box Model)定义了元素框处理元素内容、内边距、边框和外边距的方式...
- UE4 PostProcessVolume 蓝图操作后期框
- iOS截取特定的字符串(正则匹配)
- IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
- Redis--keys的通用操作