/*
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;
struct stru *prox;
} baralho;
// ponteiros
baralho *p, *q=NULL, *top=NULL;
// coloca informações na pilha
void push(int val)
{
p = (baralho *) malloc(sizeof(baralho));
p->carta = val;
p->prox = top;
top = p;
q = p;
}
// remove valores da pilha, envia para um vetor e liberar esse valor
int popn()
{
p = top;
top = p->prox;
int val = p->carta;
free(p);
return val;
}
void main()
{
int n, tam=4;
// recebe valores
for(int i=0; i<5; i++)
{
scanf("%d", &n);
printf("carta retirada %d\n", n);
push(n);
}
printf("\n");
int lista[tam], i=0;
// monta um vetor
for(;i<=tam;i++) lista[i] = popn();
// imprime valores
for(i=tam; i>=0; i--) printf("%d descartado\n", lista[i]);
printf("cartas descartadas\n");
// libera os ponteiros
free(top);
}