/* ECP: FILEname=fig10_33.c */ /* 1*/ typedef struct Cell /* 2*/ { /* 3*/ int Number; /* 4*/ struct Cell *Next; /* 5*/ } CellType; /* 6*/ CellType * /* 7*/ GetCell( int CellNo ) /* 8*/ { /* 9*/ CellType *CellPtr = malloc( sizeof( CellType ) ); /*10*/ if( CellPtr == NULL ) /*11*/ Error( "Out of memory" ); /*12*/ CellPtr->Number = CellNo; /*13*/ return CellPtr; /*14*/ } /*15*/ int /*16*/ Jos( int People, int Passes ) /*17*/ { /*18*/ CellType *BeforeBall, *Last, *First, *Loser; /*19*/ int i; /*20*/ /* Create The List */ /*21*/ First = Last = GetCell( 1 ); /*22*/ for( i = 2; i <= People; i++ ) /*23*/ Last = Last->Next = GetCell( i ); /*24*/ Last->Next = First; /* Make List Circular */ /*25*/ for( BeforeBall = Last; People != 1; People-- ) /*26*/ { /*27*/ /* Pass The Ball */ /*28*/ for( i = 0; i < Passes; i++ ) /*29*/ BeforeBall = BeforeBall->Next; /*30*/ /* Remove A Player */ /*31*/ Loser = BeforeBall->Next; /*32*/ BeforeBall->Next = Loser->Next; /*33*/ free( Loser ); /* See Text Warning */ /*34*/ } /*35*/ return BeforeBall->Number; /*36*/ }