Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //#include <time.h>
- //FILA DUPLAMENTE ENCADEADA NO ESTILO FILA ~DIMAS~DARK~
- typedef struct no
- {
- int valor;
- struct no *proximo, *anterior;
- } No;
- typedef struct lista
- {
- No* inicio;
- No* fim;
- } Carta;
- Carta* inicializa()
- {
- Carta* l = new Carta();
- l ->inicio = l->fim = NULL;
- return l;
- }
- int isVazia(Carta* l)
- {
- if (l->inicio == NULL)
- return 1;
- else
- return 0;
- }
- //Insere no início
- Carta* insereNoInicio(Carta* l, int v)
- {
- No* novo = new No();
- novo->valor = v;
- novo->anterior = NULL;
- novo->proximo = l->inicio;
- if (l->inicio != NULL)
- {
- l->inicio->anterior = novo;
- l->inicio = novo;
- }
- else
- {
- l->inicio = l->fim = novo;
- }
- return l;
- }
- //Insere no fim
- Carta* insereNoFinal(Carta* l, int v)
- {
- No* novo = new No();
- novo ->valor = v;
- novo ->proximo = NULL;
- novo ->anterior = l->fim;
- if (l->fim != NULL)
- {
- l->fim->proximo = novo;
- l->fim = novo;
- }
- else
- l->inicio = l->fim = novo;
- return l;
- }
- //Funções retira
- No* retiraIni(No* n)
- {
- No* p = n->proximo;
- if (p != NULL)
- p->anterior = NULL;
- delete(n);
- return p;
- }
- No* retiraFim(No* n)
- {
- No* p = n->anterior;
- if (p != NULL)
- p->proximo = NULL;
- delete(n);
- return p;
- }
- int retiraDoInicio(Carta* l) //Remove do inicio e retorna o valor que removeu
- {
- int v;
- v = l->inicio->valor;
- l->inicio = retiraIni(l->inicio);
- if (l->inicio == NULL)
- l->fim = NULL;
- return v;
- }
- int retiraDoFinal(Carta* l) //Retira do final e retorna o valor que removeu
- {
- int v;
- v = l->fim->valor;
- l->fim = retiraFim(l->fim);
- if (l->fim == NULL)
- l->inicio = NULL;
- return v;
- }
- void imprimeCartas(Carta* l)
- {
- No* p;
- for (p = l->inicio; p != NULL; p = p->proximo)
- {
- if (p->proximo == NULL)
- printf("%d", p->valor);
- else
- printf("%d ", p->valor);
- }
- }
- int main()
- {
- freopen("L1Q1.in", "r", stdin);
- freopen("L1Q1.out", "w", stdout);
- int contador;
- int entrada;
- int armazena_valor;
- int numero_cartas;
- // double inicio,fim;
- // inicio = clock();
- while(scanf("%d", &contador) != EOF)
- {
- numero_cartas = contador-1;
- //Inicializa o baralho de entrada/saida
- Carta* cartas;
- cartas = inicializa();
- while(contador > 0)
- {
- scanf("%d", &entrada);
- if (isVazia(cartas) == 1)
- {
- cartas = insereNoInicio(cartas, entrada);
- }
- else
- cartas = insereNoFinal(cartas, entrada);
- contador--;
- }
- while (numero_cartas > 0)
- {
- if (numero_cartas == 1)
- {
- if (cartas->inicio->valor >= cartas->fim->valor)
- {
- armazena_valor = retiraDoFinal(cartas);
- printf("%d", armazena_valor);
- }
- else
- {
- armazena_valor = retiraDoInicio(cartas);
- printf("%d", armazena_valor);
- }
- }
- else
- {
- if (cartas->inicio->valor < cartas->fim->valor) //Caso o primeiro for menor que o ultimo
- {
- armazena_valor = retiraDoInicio(cartas); //Remove e armazena o valor do primeiro
- printf("%d ", armazena_valor);
- armazena_valor = retiraDoInicio(cartas); //Remove o novo valor do inicio
- cartas = insereNoFinal(cartas, armazena_valor); //Reinsere no final
- }
- else //Se o valor for maior ou igual, vai remover do final
- {
- armazena_valor = retiraDoFinal(cartas); //Retiro do final
- printf("%d ", armazena_valor);
- armazena_valor = retiraDoFinal(cartas); //Retiro o novo valor do final e armazeno
- cartas = insereNoInicio(cartas, armazena_valor); //Joga pro começo uma de mesmo valor
- }
- }
- numero_cartas--;
- }
- printf("\n");
- }
- // fim = clock();
- // printf("\nO tempo de execucao foi: %fs", (fim-inicio)/1000);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement