魔术师发牌问题

来源:互联网 发布:2016淘宝女装第一名 编辑:程序博客网 时间:2024/04/27 08:44
#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;}
0 0
原创粉丝点击