魔術師發牌問題
阿新 • • 發佈:2020-08-20
#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; //s:新生成結點 r:永遠指向終端結點 r = head; for (int i = 0; i < CardNumber;i++) { sView Code= (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 p = head; p->data = 1; for (int i = 2; i <= CardNumber; i++) { for (int j = 0; j < i;j++) { p = p->next; if(p->data!=0) { j--; } } p->data = i; } } //銷燬工作 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 \n", p->data); p = p->next; } DestoryList(&p); return 0; }
執行結果:
按如下順序排列:
黑桃1
黑桃8
黑桃2
黑桃5
黑桃10
黑桃3
黑桃12
黑桃11
黑桃9
黑桃4
黑桃7
黑桃6
黑桃13
View Code