一,问题描述:魔术手中有13张牌,都是黑桃的,第一张牌翻过来是黑桃A,也就是1,因为他正确了,所以放在桌面上,第二张牌我们必须翻出2,但是魔术师会数两张牌,第一张放在牌的最低端,第二张翻出来刚好是2,又把它放在桌面上,接着魔术师会数三张牌,按顺序数,第一张放在牌的最低端,第二张放在牌的最低端,第三张翻开来,刚好是3,放在桌面上,以此类推把所有的牌都数完了,刚好是从1到13,即为1、2、3、4、5、6、7、8、9、10、J、Q、K这十三张按顺序排放。怎么用编程的思想来解决这个问题,使得怎样才可以保证按这个顺序拿牌会得出相应的结果。
二,解决方案:循环链表
三,代码分析:
#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 &