1. 程式人生 > 實用技巧 >魔術師發牌問題

魔術師發牌問題

#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++)
    {
        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 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; }
View Code

執行結果:

按如下順序排列:
黑桃1 
黑桃8
黑桃2
黑桃5
黑桃10
黑桃3
黑桃12
黑桃11
黑桃9
黑桃4
黑桃7
黑桃6
黑桃13
View Code