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

问题描写叙述:

       魔术师手中有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;
}

/*
根据算法规则对相应位置进行数据填充
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值