Exemple #1
0
void PrintQueue (Queue Q) {
/* I.S. : Q terdefinisi, mungkin kosong */
/* F.S. : Semua elemen Q tertulis di layar, dengan format:
[ el-head ... el-tail ], misalnya [4 8 12 9 10].
Jika kosong, tampilan di layar adalah []. */
/*kamus lokal*/
int i;
/*algoritma*/
	printf("[");
	if(!IsEmpty(Q)) {
		i = Head(Q);
		if(i<=Tail(Q)) {
			while(i<=Tail(Q)) {
				printf("%d ",Q.T[i]);
				i++;
			}
		} else {
			while(i<=MaxEl(Q)) {
				printf("%d ",Q.T[i]);
				i++;
			} i=1;
			while(i<=Tail(Q)) {
				printf("%d ",Q.T[i]);
				i++;
			}
		}
	}
	printf("]\n");
}
void DealokasiDadu(Queue *Q)
/* Proses : mengembalikan memori Q */
/* I.S. Q pernah dialokasi */
/* F.S. Q menjadi tidak terdefinisi lagi, MaxEl(Q) diset 0 */
{
    MaxEl(*Q) = Nil;
    free((*Q).T);
}
Exemple #3
0
/* *** Destruktor *** */
void DeAlokasi (Queue *Q)
/* Proses  Mengembalikan memori Q */
/* I.S. Q pernah dialokasi */
/* F.S. Q menjadi tidak terdefinisi lagi, MaxEl(Q) diset 0 */
{
	/*algoritma*/
	MaxEl(*Q) = Nil;
	free((*Q).T);	
}
Exemple #4
0
boolean IsFull (Queue Q) 
/* Mengirim true jika tabel penampung elemen Q sudah penuh yaitu mengandung MaxEl
elemen */
{
	/*kamus lokal*/
	int m = Head(Q) - Tail(Q);
	/*algoritma*/
	return (m == 1) || (m == (-1*MaxEl(Q)+1)); 
}
void CreateEmpty(Queue *Q, int Max)
/* I.S. Sembarang */
/* F.S. Sebuah Q kosong terbentuk dan salah satu kondisi sbb: */
/* Jika alokasi berhasil, Tabel memori dialokasi berukuran Max */
/* atau : jika alokasi gagal, Q kosong dgn MaxEl = 0 */
/* Proses : Melakukan alokasi, membuat sebuah Q kosong */
{
    (*Q).T = (infotype_dadu *) malloc ((Max+1) * sizeof(infotype_dadu));
    if ((*Q).T != NULL)
    {
        MaxEl(*Q) = Max;
        Head(*Q) = Nil;
        Tail(*Q) = Nil;
    }
    else
    {
        MaxEl(*Q) = Nil;
    }
}
Exemple #6
0
/* *** Konstruktor *** */
void CreateEmpty (Queue *Q, int Max)
/* I.S. Max terdefinisi */
/* F.S. Sebuah Q kosong terbentuk dan salah satu kondisi sbb :       */
/*      Jika alokasi berhasil, tabel memori dialokasi berukuran Max  */
/*      atau : jika alokasi gagal, Q kosong dg Maksimum elemen=0     */
/* Proses : Melakukan alokasi memori dan membuat sebuah Q kosong     */
{
    (*Q).T = (infotype *) malloc((Max+1)*sizeof(infotype));
    if ((*Q).T != Nil)
    {
        MaxEl(*Q) = Max;
        Head(*Q) = Nil;
        Tail(*Q) = Nil;
    }
    else /* alokasi gagal */
    {
        MaxEl(*Q)=Nil;
    }
}
int NBElmt(Queue Q)
/* Mengirimkan banyaknya elemen queue. Mengirimkan 0 jika Q kosong. */
{
    if (IsEmptyQueue(Q))
    {
        return 0;
    }
    else
    {
        return Tail(Q) - Head(Q) + 1 + (Head(Q) > Tail(Q) ? MaxEl(Q) : 0);
    }
}
void CreateQueuePemain(Queue *Q, int Maks)
/* I.S : Queue kosong dengan alokasi Min 2 dan Maks 4 */
/* F.S : Menghasilkan Q yang berisi informasi seluruh pemain berupa nama dengan skor awal = 0 */
{
	int i;
	Pemain P;
	CreateEmpty(&(*Q),Maks);
	for (i = 1; i <= MaxEl(*Q); i++)
	{
		printf("Nama Pemain %d :  ", i);
		scanf("%s", &P.Nama);
		P.Skor = 0;
		Add(&(*Q),P);
	}
}
/* *** Primitif Add/Delete *** */
void Add(Queue *Q, infotypeQueue X)
/* Proses: Menambahkan X pada Q dengan aturan FIFO */
/* I.S. Q mungkin kosong, tabel penampung elemen Q TIDAK penuh */
/* F.S. X menjadi TAIL yang baru, TAIL "maju" dengan mekanisme circular buffer */
{
    if (IsEmptyQueue(*Q))
    {
        Head(*Q) = 1;
        Tail(*Q) = 1;
    }
    else if (Tail(*Q) == MaxEl(*Q))
    {
        Tail(*Q) = 1;
    }
    else
    {
        ++Tail(*Q);
    }

    InfoTail(*Q) = X;
}
Exemple #10
0
void Del (Queue *Q,infotype *X)
/* Proses  Menghapus elemen pertama pada Q dengan aturan FIFO */
/* I.S. Q tidak kosong */
/* F.S. X = nilai elemen HEAD pada I.S.,
Jika Queue masih isi  HEAD "maju".
Jika HEAD baru menjadi MaxEl + 1, maka HEAD diset = 1;
Jika Queue menjadi kosong, HEAD = TAIL = Nil. */
{
	/*kamus lokal*/

	/*algoritma*/  
		(*X) = InfoHead(*Q);
		if (Head(*Q) == Tail(*Q))	{
			Head(*Q) = Nil;
			Tail(*Q) = Nil;
		}
		else {	
			Head(*Q)++;
			if (Head(*Q) == MaxEl(*Q) + 1) Head(*Q) = 1;
		}
}
void Del(Queue *Q, infotypeQueue *X)
/* Proses: Menghapus X pada Q dengan aturan FIFO */
/* I.S. Q tidak mungkin kosong */
/* F.S. X = nilai elemen HEAD pd I.S., HEAD "maju" dengan mekanisme circular buffer; 
        Q mungkin kosong */
{
    *X = InfoHead(*Q);

    if (Head(*Q) == Tail(*Q))
    {
        Head(*Q) = 0;
        Tail(*Q) = 0;
    }
    else if (Head(*Q) == MaxEl(*Q))
    {
        Head(*Q) = 1;
    }
    else
    {
        ++Head(*Q);
    }
}
boolean IsFull(Queue Q)
/* Mengirim true jika tabel penampung nilai elemen queue penuh */
{
    return ((Head(Q) == 1) && (Tail(Q) == MaxEl(Q)));
}
Exemple #13
0
boolean IsFull (Queue Q)
/* Mengirim true jika tabel penampung elemen Q sudah penuh yaitu mengandung MaxEl elemen */
{
    return (Tail(Q)==MaxEl(Q));
}
boolean IsFullQueue(Queue Q)
/* Mengirim true jika tabel penampung elemen Q sudah penuh */
/* yaitu mengandung elemen sebanyak MaxEl */
{
    return NBElmt(Q) == MaxEl(Q);
}