Skip to content

Instantly share code, notes, and snippets.

@chicobentojr
Created December 12, 2016 11:32
Show Gist options
  • Save chicobentojr/db9c2f416ac748cdf19ed4a49afc7520 to your computer and use it in GitHub Desktop.
Save chicobentojr/db9c2f416ac748cdf19ed4a49afc7520 to your computer and use it in GitHub Desktop.
#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