#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;
}
}