问题描述:
魔术师手里一共有13张牌,全是黑桃,1~13. 魔术师需要实现一个魔术:这是十三张牌全部放在桌面上(正面向下), 第一次摸出第一张,是1,翻过来放在桌面上。 第二次摸出从上往下数第二张,是2,翻过来 放在桌面上,(第一张放在最下面去,等会儿再摸), 第三次摸出从上往下数第三张,是3,翻过来放在桌面上,(第一张和第二张 放在最下面去,等会儿再摸) 以此类推 最后一张就是13#include#include using namespace std;typedef struct Node{ int num;//牌号 struct Node *next;}Node;Node *Create(int n){ Node *p,*q,*h=NULL; int i; for(i=1;i<=n;i++) { p=(Node*)malloc(sizeof(Node)); p->num=0;//初始化为零 if(h==NULL) h=p; else q->next=p; q=p;p->next=NULL; } p->next=h; h=p; return(h);//h为循环链表尾指针}int Display(Node * h){ Node * p=h->next; int i; i=(h->next==h)?0:1;//判断是否循环链表中只有一个元素 cout< num< next; while(p!=h) { cout< num< next; } if(i) cout< num< next; while(p->num)//已填入元素,可以当成已从链表中删去 { p=p->next; } } q=p->next; while(q->num)//已填入元素,可以当成已从链表中删去 { q=q->next; } q->num=i; p=q; } return 0;}int main(){ Node *H; H=Create(13); Magician(H,13); Display(H); return 0;}