魔术师发牌问题(数据结构)

来源:互联网 发布:嵌入式linux终端vim 编辑:程序博客网 时间:2024/04/26 10:15

笔记

#include<stdio.h>#include<stdlib.h>#define CardNumber 13typedef 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<=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 pa;    int j;    int Countnumber = 2;    pa = head;    pa->data = 1;//阿权,这条语句一执行,pa->next->data也会被赋值为1    while(1)    {        for(j=0; j<Countnumber; j++)        {            pa = pa->next;            if(pa->data != 0)            {                pa->next;                j--;            }        }        if(pa->data == 0)        {            pa->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 = CreateLinkList();    Magician(p);    printf("按如下顺序排列:\n");    for(i=0; i<CardNumber; ++i)    {        printf("黑桃%d ",p->data);        p = p->next;    }    DestoryList(&p);    return 0;}
0 0
原创粉丝点击