/*
Em um determinado jogo de cartas, cada jogador deve retirar 5 cartas do monte e
segurá-las em suas mãos. Contudo, a ordem de descarte deve ser a mesma ordem em
que as cartas foram retiradas do monte.
Considerando a imagem exemplificativa acima, implemente um algoritmo, utilizando
estruturas de dados dinâmicas, capaz de representar a situação exposta: as cartas,
inicialmente presentes no monte, devem ser armazenadas nas mãos do usuário e, em
seguida, descartadas (seguindo as regras anteriormente mencionadas).
*/
/*
grupo: Allan Cherre, Luis Henrique, Rodrigo Gonçalves
*/
#include <stdio.h>
#include <stdlib.h>
// estrutura do baralho
typedef struct stru
{
int carta;
char nipe;
struct stru *prox;
} baralho;
// ponteiros
baralho *p, *q=NULL, *top=NULL;
// coloca informações na pilha
void push(int val, char nipe)
{
p = (baralho *) malloc(sizeof(baralho));
p->carta = val;
p->nipe = nipe;
p->prox = q;
top = p;
q = p;
}
// remove valores da pilha, envia para uma fila e liberar esse valor
void popn()
{
p = top;
top = p->prox;
printf("%d %c descartado\n", p->carta, p->nipe);
free(p);
}
void main()
{
int n, tam=4;
char nipe;
// recebe valores
for(int i=0; i<5; i++)
{
scanf("%d %c", &n, &nipe);
printf("carta retirada %d %c\n", n, nipe);
push(n, nipe);
}
printf("\n");
int lista[tam], i=0;
// monta um vetor
for(;i<=tam;i++) popn();
printf("cartas descartadas\n");
// libera os ponteiros
free(top);
}