#include<stdio.h>
#include<stdlib.h>
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<=13;i++)
{
s=(linklist)malloc(sizeof(sqlist));
s->data=0;//链表元素初始化为0
if(head==NULL)
head=s;
else
r->next=s;
r=s;
}
r->next=head;
return head;
}
//发牌顺序计算
void Magician(linklist head)
{
linklist p;
int j;
int Countnumber=2;
p=head;
p->data=1;//第一张牌放1
while(1)
{
for(j=0;j<Countnumber;j++)
{
p=p->next;
//该位置有牌的话,则指向下一个位置
if(p->data!=0)
{
p->next;
j--;
}
}
if(p->data==0)
{
p->data=Countnumber;
Countnumber++;
if(Countnumber==14)
break;
}
}
}
//销毁工作
void DestoryList(linklist* list)
{
linklist ptr=*list;
linklist buff[13];
int i=0;
while(i<13)
{
buff[i++]=ptr;
ptr=ptr->next;
}
for(i=0;i<13;++i)
free(buff[i]);
*list=0;
}
int main()
{
linklist p;
int i;
p= CreateLinkList();
Magician(p);
printf("按如下顺序排列:\n");
for(i=0;i<13;i++)
{
printf("黑桃%d\n",p->data);
p=p->next;
}
printf("我们都是小小魔术师!\n");
DestoryList(&p);
return 0;
}
魔术师发牌问题
最新推荐文章于 2021-02-17 02:57:46 发布