笔记
#include<stdio.h>
#include<stdlib.h>
#define CardNumber 13
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<=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;
}
本文介绍了一个基于链表实现的发牌算法,并详细展示了链表创建、发牌顺序计算及销毁等过程。该算法使用 C 语言实现,通过定义结构体节点并进行循环连接来构建链表。
677

被折叠的 条评论
为什么被折叠?



