#include <stdio.h>
#include <stdlib.h>
#define adet 52
 /* En doğru sonuç için ***|* DEV C++ ta derlemenizi*|
 \*öneririm.**cenkaktas**/
typedef struct YAPI{
    struct YAPI *onceki,*sonraki;
    int sayi;
    char deger;
}yapi;
typedef struct DIZI{
    yapi *ilk,*son;
}dizi;
dizi sirali,rastgele;
int main(int argc,char *argv[]){
    srand(time(NULL));
    int i=0,j;
    yapi *isaretci=NULL;
    sifirla(&sirali);sifirla(&rastgele);
    do{
        i++;
        yapi *yeni;
        yeni=(yapi *) malloc(sizeof(yapi));
        ata(yeni);
        ekle(&sirali,yeni);
    }while(i<=adet);
    for(i=0;i<adet;i++){
        isaretci=sirali.ilk;
        j=((int)rand())%(adet-i);
        for(;j>0;j--)
            {
                isaretci=isaretci->sonraki;
            } 
        sil(&sirali,isaretci); 
        ekle(&rastgele,isaretci);
    }
    goster(rastgele);
    getch();
}
ata(yapi *a){
    static int i=0;
    a->deger=(int)(i/13)+3;
    a->sayi=i%13+1;i++;
}    
ekle(dizi *kok,yapi *a){
    if(!kok->ilk){
        kok->ilk=a;
        kok->son=a;
        a->onceki=NULL;
        a->sonraki=NULL;
    }
    else{
        kok->son->sonraki=a;
        a->onceki=kok->son;
        a->sonraki=NULL;
        kok->son=a;
    }
}
sifirla(dizi *kok){
    kok->ilk=kok->son=NULL;
}    
goster(dizi kok){
    yapi *isaretci=kok.ilk;
    while(isaretci){
        printf("%c%d\n",isaretci->deger,isaretci->sayi);
        isaretci=isaretci->sonraki;
    };
}
sil(dizi *kok, yapi *a){
    if(a->onceki && a->sonraki){
        a->onceki->sonraki=a->sonraki;
        a->sonraki->onceki=a->onceki;
    } else if(!a->onceki && !a->sonraki){
        kok->ilk=kok->son=NULL;
    }else if(!a->onceki){
        kok->ilk=a->sonraki;
        a->sonraki->onceki=NULL;
    } else if(!a->sonraki){
        a->onceki->sonraki=NULL;
        kok->son=a->onceki->sonraki;
    }
}