Created
December 12, 2016 11:32
-
-
Save chicobentojr/db9c2f416ac748cdf19ed4a49afc7520 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
struct No { | |
int numero; | |
struct No *proximo; | |
}; | |
char nomeDoArquivo[99]; | |
struct No * fim, novoNo; | |
int opcao, tamanho = 0, novoValor; | |
int menu() | |
{ | |
int opcao; | |
printf("\n Menu de Opções:\n"); | |
printf("1 - (Re)Iniciar Pilha:\n"); | |
printf("2 - Exibir Pilha:\n"); | |
printf("3 - Desempilhar:\n"); | |
printf("4 - Empilhar:\n"); | |
printf("5 - Exibir tamanho da Pilha:\n"); | |
printf("6 - Salvar Pilha em arquivo:\n"); | |
printf("0 - Sair:\n"); | |
printf("Digite o valor correspondente à uma das seguintes opções: "); | |
scanf("%d", &opcao); | |
printf("\n"); | |
return opcao; | |
} | |
void iniciar(struct No *PILHA) | |
{ | |
PILHA = NULL; | |
fim = PILHA; | |
tamanho = 0; | |
printf("A pilha foi reiniciada!\n"); | |
} | |
void exibe(struct No *PILHA) | |
{ | |
if (tamanho == 0) | |
{ | |
printf("A pilha está vazia!\n"); | |
return; | |
} | |
printf("// PILHA (%d elemento%s)\n", tamanho, tamanho > 1 ? "s" : ""); | |
printf("---------\n"); | |
printf("| %5d |\n", PILHA->numero); | |
while (PILHA->proximo) | |
{ | |
printf("---------\n"); | |
PILHA = PILHA->proximo; | |
printf("| %5d |\n", PILHA->numero); | |
} | |
printf("---------\n"); | |
} | |
void desempilhar(struct No *PILHA) | |
{ | |
if (tamanho == 0) | |
{ | |
printf("A pilha está vazia!\n"); | |
return; | |
} | |
PILHA = PILHA->proximo; | |
fim = PILHA; | |
tamanho--; | |
} | |
void empilhar(struct No *elemento) | |
{ | |
struct No *temp; | |
temp = (struct No *)malloc(sizeof(struct No)); | |
if (fim == NULL) | |
{ | |
fim = temp; | |
fim->proximo = NULL; | |
fim->numero = elemento->numero; | |
} | |
else | |
{ | |
temp->proximo = fim; | |
temp->numero = elemento->numero; | |
fim = temp; | |
} | |
tamanho++; | |
} | |
int getTamanho() | |
{ | |
return tamanho; | |
} | |
void salvarPilhaEmArquivo(char *nomeArquivo) | |
{ | |
if (tamanho == 0) | |
{ | |
printf("A pilha está vazia!\n"); | |
return; | |
} | |
FILE * arq_pilha; | |
arq_pilha = fopen(nomeArquivo, "w"); | |
if (arq_pilha == NULL){ | |
printf("ERRO: Não foi possível abrir o arquivo %s.\n", nomeArquivo); | |
} | |
else { | |
fprintf(arq_pilha, "// PILHA (%d elemento%s)\n", tamanho, tamanho > 1 ? "s" : ""); | |
fprintf(arq_pilha, "---------\n"); | |
fprintf(arq_pilha, "| %5d |\n", fim->numero); | |
while (fim->proximo) | |
{ | |
fprintf(arq_pilha, "---------\n"); | |
fim = fim->proximo; | |
fprintf(arq_pilha, "| %5d |\n", fim->numero); | |
} | |
fprintf(arq_pilha, "---------\n"); | |
fclose(arq_pilha); | |
} | |
return; | |
} | |
int main(int argc, char const *argv[]) { | |
opcao = menu(); | |
while (opcao != 0) | |
{ | |
switch (opcao) { | |
case 1: | |
iniciar(&novoNo); | |
break; | |
case 2: | |
exibe(fim); | |
break; | |
case 3: | |
desempilhar(fim); | |
break; | |
case 4: | |
printf("Digite o número para ser empilhado:\n"); | |
scanf("%d", &novoNo.numero); | |
empilhar(&novoNo); | |
break; | |
case 5: | |
printf("Tamanho da Pilha: %d\n", getTamanho()); | |
break; | |
case 6: | |
printf("Digite o nome do arquivo:"); | |
getchar(); | |
gets(nomeDoArquivo); | |
salvarPilhaEmArquivo(nomeDoArquivo); | |
break; | |
case 0: | |
break; | |
default: | |
printf("Digite um valor válido!\n"); | |
} | |
opcao = menu(); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment