Buscar

jogandocartas exec URI

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
typedef struct{
	int dado;
}Titem;
typedef struct celula{
	Titem item;
	struct celula *prox;
}Tcelula;
typedef struct{
	Tcelula *primeiro, *ultimo;
	int tamanho;
}Tlista;
void inicialista(Tlista *pLista){
	pLista->primeiro = NULL;
	pLista->ultimo = pLista->primeiro;
	pLista->tamanho = 0;
}
int isVazia(Tlista *pLista){
	return pLista->primeiro == NULL;
}
int enqueue(Tlista *pLista, Titem x){
	Tcelula *novo = (Tcelula *) malloc (sizeof(Tcelula));
	novo->item = x;
	novo->prox = NULL;
	if(isVazia(pLista)){
		pLista->primeiro = novo;
		pLista->ultimo = novo;
		pLista->tamanho++;
		return 0;
	}
	pLista->ultimo->prox = novo;
	pLista->ultimo = novo;
	pLista->tamanho++;
	return 1;
}
int dequeue(Tlista *pLista, Titem *x){
	Tcelula *aux;
	if(isVazia(pLista)){
		printf("Lista Vazia!!\n");
		return 0;
	}
	aux = pLista->primeiro;
	*x = aux->item;
	pLista->primeiro = aux->prox;
	free(aux);
	pLista->tamanho--;
	return 1;
}
int imprimir(Tlista *pLista){
	Tcelula *aux;
	if(isVazia(pLista)){
		printf("Lista Vazia!!\n");
		return 0;	
	}
	aux = pLista->primeiro;
	while (aux != NULL){
		printf("%d", aux->item.dado);
		aux = aux->prox;
	}
	return 1;
}
int jogandocartas(Tlista *pLista){
	Titem x,y;
	Tcelula *aux;
	printf("Discarded cards: ");
	while(pLista->tamanho > 1){
		dequeue(pLista, &x);
		if(pLista->tamanho > 1)
			printf("%d, ", x.dado);
		else
			printf("%d", x.dado);
		aux = pLista->primeiro;
		y = pLista->primeiro->item;
		pLista->primeiro = pLista->primeiro->prox;
		free(aux);
		enqueue(pLista,y);
		pLista->tamanho--;
	}
	printf("\nRemaining card: %d\n", pLista->primeiro->item.dado);
	return 0;
}
int limpafila(Tlista *pLista){
	Tcelula *aux;
	if(isVazia(pLista))
		return 0;
	while(pLista->primeiro != NULL){
		aux = pLista->primeiro;
		pLista->primeiro = aux->prox;
		free(aux);
		pLista->tamanho--;
	}
	pLista->primeiro = NULL;
	pLista->ultimo = NULL;
	return 1;
}
int main()
{
	Tlista lista;
	inicialista(&lista);
	Titem x;
	int i,n;
	do{
		i = 1;
		n =1;
		scanf("%d",&n);
		if(n >= 2){
			while(i <= n){
				x.dado = i;
				enqueue(&lista, x);
				i++;
			}
			jogandocartas(&lista);
			limpafila(&lista);
		}
	}while(n != 0);
	return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais