/*!
* response 黑桃1 黑桃8 黑桃2 黑桃5 黑桃10 黑桃3 黑桃12 黑桃11 黑桃9 黑桃4 黑桃7 黑桃6 黑桃13
*/
#include <stdio.h>
#include <stdlib.h>
#define CardNumber 13
typedef struct node
{
int data;
struct node *next;
} sqlist, *linklist;
// 初始化列表
linklist CerateLinkList()
{
linklist head = NULL;
linklist s, r;
int i;
r = head;
for (i=1; i<= CardNumber; i++)
{
s = (linklist) malloc (sizeof(sqlist));
s->data = 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;
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[CardNumber];
int i = 0;
while(i < CardNumber)
{
buff[i++] = ptr;
ptr=ptr->next;
}
for (i=0; i<CardNumber; i++)
free(buff[i]);
*list = 0;
}
int main()
{
linklist p;
int i;
p = CerateLinkList();
Magician(p);
printf("按如下顺序排列:\n");
for (i=0; i < CardNumber; i++)
{
printf("黑桃%d ", p->data);
p = p->next;
}
DestoryList(&p);
return 0;
}