荆轲 发表于 2022-4-12 21:11:35

数据结构与算法-线性表15

//魔术师发牌

#include <stdio.h>
#include <stdlib.h>

typedef struct Linklist
{
        int num;
        struct Linklist *next;
}Linklist;

Linklist *create(int n)//创建n个数据结构
{
        Linklist *p=NULL,*head,*temp;//
        int i=1;
        head=(Linklist *)malloc(sizeof(Linklist));//申请内存
        p=head;


        if(0!=n)
        {
                while(i<=n)
                {
                        temp=(Linklist *)malloc(sizeof(Linklist));
                        temp->num=0;
                        p->next=temp;
                        p=temp;
                        i++;
                }
                temp->next=head->next;//最后一个指向第一个结点,最开始的舍去
        }
        free(head);
        return temp->next;//返回第一个结点指针
}


void card_num(Linklist *p)
{
        int i;
        int number=2;
        Linklist *temp=NULL;
        temp=p;
        temp->num=1;//第一张牌为黑桃A
        while(1)
        {
                for(i=0;i<number;i++)
                {
                        temp=temp->next;
                        if(temp->num!=0)
                        {
                                i--;//跳过前面已经翻开的牌
                        }
                }
                if(temp->num==0)
                {
                        temp->num=number;
                        number++;
                        if(number==14)
                        {
                                break;
                        }
                }
        }
}
void main()
{
        Linklist *p,*temp1,*temp2;
        int n=13,i,j;
        p=create(13);
    card_num(p);
        printf("扑克牌顺序为:\n");

        for(i=0;i<13;i++)
        {
                printf("黑桃%d\n",p->num);
                p=p->next;
        }
        printf("\n");
}


页: [1]
查看完整版本: 数据结构与算法-线性表15