Problemas com listas
21/10/2018
0
Olá, pessoal, preciso da ajuda de vocês. Estou tentando criar uma pilha em C, mas estou tendo problemas com a função desempilha. Como vocês podem ver eu até coloquei o comando printf("\\\\n===OK"); para saber quando o código é lido lá, mas nada nem chega a aparecer. Há algum problema? Desde já agradeço.
#include<stdlib.h>
#define MaxTam 1000
typedef struct {
int info;
} TipoItem;
typedef struct {
TipoItem Item[MaxTam];
int Topo;
} TipoPilha;
void FPVazia(TipoPilha *Pilha)
{
Pilha->Topo = 0;
} /* FPVazia */
int Vazia(TipoPilha* pPilha)
{
return (pPilha->Topo == 0);
} /* Vazia */
void Empilha(TipoItem x, TipoPilha *pPilha)
{
if (pPilha->Topo == MaxTam){
printf("\\\\nErro, pilha cheia\\\\n\\\\n");
}
else
{
pPilha->Item[pPilha->Topo] = x;
pPilha->Topo++;
}
} /* Empilha */
void Desempilha(TipoPilha *pPilha, TipoItem *Item)
{
if (Vazia(pPilha)){
printf("\\\\nErro, pilha vazia\\\\n");
}
else
{
pPilha->Topo--;
*Item = pPilha->Item[pPilha->Topo];
printf("\\\\n===OK");
}
} /* Desempilha */
int Tamanho(TipoPilha* pPilha)
{
return (pPilha->Topo);
} /* Tamanho */
int main()
{
TipoPilha *Pilha;
Pilha = (TipoPilha*) malloc(sizeof(TipoPilha));
TipoItem *Item1, *Item2, *Item3, a, b, c;
a.info = 2;
b.info = 5;
c.info = 1;
Desempilha(Pilha, Item1);
Empilha(a, Pilha);
Empilha(b, Pilha);
Empilha(c, Pilha);
Desempilha(Pilha, Item1);
Desempilha(Pilha, Item2);
Desempilha(Pilha, Item3);
printf("\\\\nPilha = (TOPO) %d %d %d (BASE)\\\\n", Item1->info, Item2->info, Item3->info);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define MaxTam 1000
typedef struct {
int info;
} TipoItem;
typedef struct {
TipoItem Item[MaxTam];
int Topo;
} TipoPilha;
void FPVazia(TipoPilha *Pilha)
{
Pilha->Topo = 0;
} /* FPVazia */
int Vazia(TipoPilha* pPilha)
{
return (pPilha->Topo == 0);
} /* Vazia */
void Empilha(TipoItem x, TipoPilha *pPilha)
{
if (pPilha->Topo == MaxTam){
printf("\\\\nErro, pilha cheia\\\\n\\\\n");
}
else
{
pPilha->Item[pPilha->Topo] = x;
pPilha->Topo++;
}
} /* Empilha */
void Desempilha(TipoPilha *pPilha, TipoItem *Item)
{
if (Vazia(pPilha)){
printf("\\\\nErro, pilha vazia\\\\n");
}
else
{
pPilha->Topo--;
*Item = pPilha->Item[pPilha->Topo];
printf("\\\\n===OK");
}
} /* Desempilha */
int Tamanho(TipoPilha* pPilha)
{
return (pPilha->Topo);
} /* Tamanho */
int main()
{
TipoPilha *Pilha;
Pilha = (TipoPilha*) malloc(sizeof(TipoPilha));
TipoItem *Item1, *Item2, *Item3, a, b, c;
a.info = 2;
b.info = 5;
c.info = 1;
Desempilha(Pilha, Item1);
Empilha(a, Pilha);
Empilha(b, Pilha);
Empilha(c, Pilha);
Desempilha(Pilha, Item1);
Desempilha(Pilha, Item2);
Desempilha(Pilha, Item3);
printf("\\\\nPilha = (TOPO) %d %d %d (BASE)\\\\n", Item1->info, Item2->info, Item3->info);
return 0;
}
João Xavier
Curtir tópico
+ 0
Responder
Posts
07/07/2019
João Júnior
Olá, pessoal, preciso da ajuda de vocês. Estou tentando criar uma pilha em C, mas estou tendo problemas com a função desempilha. Como vocês podem ver eu até coloquei o comando printf("\\\\\\\\n===OK"); para saber quando o código é lido lá, mas nada nem chega a aparecer. Há algum problema? Desde já agradeço.
#include<stdlib.h>
#define MaxTam 1000
typedef struct {
int info;
} TipoItem;
typedef struct {
TipoItem Item[MaxTam];
int Topo;
} TipoPilha;
void FPVazia(TipoPilha *Pilha)
{
Pilha->Topo = 0;
} /* FPVazia */
int Vazia(TipoPilha* pPilha)
{
return (pPilha->Topo == 0);
} /* Vazia */
void Empilha(TipoItem x, TipoPilha *pPilha)
{
if (pPilha->Topo == MaxTam){
printf("\\\\\\\\nErro, pilha cheia\\\\\\\\n\\\\\\\\n");
}
else
{
pPilha->Item[pPilha->Topo] = x;
pPilha->Topo++;
}
} /* Empilha */
void Desempilha(TipoPilha *pPilha, TipoItem *Item)
{
if (Vazia(pPilha)){
printf("\\\\\\\\nErro, pilha vazia\\\\\\\\n");
}
else
{
pPilha->Topo--;
*Item = pPilha->Item[pPilha->Topo];
printf("\\\\\\\\n===OK");
}
} /* Desempilha */
int Tamanho(TipoPilha* pPilha)
{
return (pPilha->Topo);
} /* Tamanho */
int main()
{
TipoPilha *Pilha;
Pilha = (TipoPilha*) malloc(sizeof(TipoPilha));
TipoItem *Item1, *Item2, *Item3, a, b, c;
a.info = 2;
b.info = 5;
c.info = 1;
Desempilha(Pilha, Item1);
Empilha(a, Pilha);
Empilha(b, Pilha);
Empilha(c, Pilha);
Desempilha(Pilha, Item1);
Desempilha(Pilha, Item2);
Desempilha(Pilha, Item3);
printf("\\\\\\\\nPilha = (TOPO) %d %d %d (BASE)\\\\\\\\n", Item1->info, Item2->info, Item3->info);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define MaxTam 1000
typedef struct {
int info;
} TipoItem;
typedef struct {
TipoItem Item[MaxTam];
int Topo;
} TipoPilha;
void FPVazia(TipoPilha *Pilha)
{
Pilha->Topo = 0;
} /* FPVazia */
int Vazia(TipoPilha* pPilha)
{
return (pPilha->Topo == 0);
} /* Vazia */
void Empilha(TipoItem x, TipoPilha *pPilha)
{
if (pPilha->Topo == MaxTam){
printf("\\\\\\\\nErro, pilha cheia\\\\\\\\n\\\\\\\\n");
}
else
{
pPilha->Item[pPilha->Topo] = x;
pPilha->Topo++;
}
} /* Empilha */
void Desempilha(TipoPilha *pPilha, TipoItem *Item)
{
if (Vazia(pPilha)){
printf("\\\\\\\\nErro, pilha vazia\\\\\\\\n");
}
else
{
pPilha->Topo--;
*Item = pPilha->Item[pPilha->Topo];
printf("\\\\\\\\n===OK");
}
} /* Desempilha */
int Tamanho(TipoPilha* pPilha)
{
return (pPilha->Topo);
} /* Tamanho */
int main()
{
TipoPilha *Pilha;
Pilha = (TipoPilha*) malloc(sizeof(TipoPilha));
TipoItem *Item1, *Item2, *Item3, a, b, c;
a.info = 2;
b.info = 5;
c.info = 1;
Desempilha(Pilha, Item1);
Empilha(a, Pilha);
Empilha(b, Pilha);
Empilha(c, Pilha);
Desempilha(Pilha, Item1);
Desempilha(Pilha, Item2);
Desempilha(Pilha, Item3);
printf("\\\\\\\\nPilha = (TOPO) %d %d %d (BASE)\\\\\\\\n", Item1->info, Item2->info, Item3->info);
return 0;
}
Piá, use a opção de inserção de código [</>] da página, poque do jeito que tu colocou ficou ruim de ler o código. Bom, essa é pilha estática (usa as 'células' do vetor como nós. Eu tenho um projeto pronto aqui, veja:
Main.c
#include<stdio.h> #include<stdlib.h> #include<conio2.h> #include "PilhaEstatica.h" void exibirMenu(); int lerOpcao(); void informarAluno(struct Aluno *estudante); int confirmarRemocao(Pilha *pilha); int main(){ int opcao = 0, retorno; Pilha *pilha = NULL; pilha = criarPilha(); struct Aluno estudante; textcolor(15); printf("\\n\\tPila Estática\\n\\n"); textcolor(7); do{ switch(opcao){ case 0: exibirMenu(); break; case 1: informarAluno(&estudante); retorno = push(pilha, estudante); if(retorno){ textcolor(15); printf("\\n\\tAluno inserido na pilha com sucesso!\\n"); textcolor(7); }else{ textcolor(15); printf("\\n\\tNão foi possível inserir o aluno na pilha!\\n"); textcolor(7); } break; case 2: retorno = pop(pilha); if(retorno){ textcolor(15); printf("\\tAluno removido da pilha com sucesso!\\n"); textcolor(7); }else{ textcolor(15); printf("\\tNão foi possível remover o aluno da pilha!\\n"); textcolor(7); } break; case 3: textcolor(15); printf("\\n\\tAlunos cadastrados: "); textcolor(9); printf("%d\\n\\n", tamanhoPilha(pilha)); textcolor(7); break; case 4: retorno = pull(pilha, &estudante); exibirConsulta(retorno, &estudante); break; case 5: emitirRelatorio(pilha); break; case 99: exit(0); break; default: exibirMenu(); } opcao = lerOpcao(); }while(opcao != 99); destruirPilha(pilha); textcolor(8); return 0; } void exibirMenu(){ textcolor(10); printf("\\n\\t0 - Exibir o menu de opções\\n" "\\t1 - Inserir aluno na pilha\\n" "\\t2 - Remover aluno da pilha\\n" "\\t3 - Exibir o número de alunos cadastrados\\n" "\\t4 - Consultar a pilha\\n" "\\t5 - Emitir relatório\\n" "\\t99 - Sair do programa.\\n\\n"); textcolor(7); } int lerOpcao(){ int opcaoDesejada; textcolor(15); printf("\\n\\tOpção escolhida: "); textcolor(14); scanf("%d", &opcaoDesejada); printf("\\n"); setbuf(stdin, NULL); textcolor(7); return opcaoDesejada; } void informarAluno(struct Aluno *estudante){ textcolor(7); printf("\\n\\tMatrícula: "); textcolor(14); scanf("%d", &estudante->matricula); setbuf(stdin, NULL); textcolor(7); printf("\\tNome: "); textcolor(14); scanf("%49[^\\n]s", estudante->nome); setbuf(stdin, NULL); textcolor(7); printf("\\tNota do 1º bimestre: "); textcolor(14); scanf("%f", &estudante->notaBim1); setbuf(stdin, NULL); textcolor(7); printf("\\tNota do 2º bimestre: "); textcolor(14); scanf("%f", &estudante->notaBim2); setbuf(stdin, NULL); textcolor(7); printf("\\tNota do 3º bimestre: "); textcolor(14); scanf("%f", &estudante->notaBim3); setbuf(stdin, NULL); textcolor(7); printf("\\tNota do 4º bimestre: "); textcolor(14); scanf("%f", &estudante->notaBim4); setbuf(stdin, NULL); } int confirmarRemocao(Pilha *pilha){ char confirmacao; if(!pilhaVazia(pilha)){ textcolor(14); scanf("%c", &confirmacao); setbuf(stdin, NULL); textcolor(7); if(confirmacao == 'S' || confirmacao == 's') return 1; else if(confirmacao == 'N' || confirmacao == 'n') return 0; if(confirmacao != 'S' || confirmacao != 's' || confirmacao != 'N' || confirmacao != 'n'){ textcolor(12); printf("\\tOpção inválida!\\n\\n"); textcolor(7); } }else{ textcolor(12); printf("\\tNão há alunos cadastrados!\\n\\n"); textcolor(7); } return 0; }
Protótipos.h
#define MAX 50 struct Aluno{ int matricula; char nome[50]; float notaBim1, notaBim2, notaBim3, notaBim4; }; typedef struct Pilha Pilha; /*Protótipos*/ Pilha* criarPilha(); void destruirPilha(Pilha *p); int tamanhoPilha(Pilha *p); int pilhaVazia(Pilha *p); int pilhaCheia(Pilha *p); int push(Pilha *p, struct Aluno a); int pop(Pilha *p); int pull(Pilha *p, struct Aluno *a); void exibirConsulta(int s, struct Aluno *estudante); void emitirRelatorio(Pilha *p);
Implementacao.c
#include<stdio.h> #include<stdlib.h> #include<conio2.h> #include "PilhaEstatica.h" struct Pilha{ int quantidade; struct Aluno aluno[MAX]; }; Pilha* criarPilha(){ Pilha *pilha = (Pilha*) malloc(sizeof(Pilha)); if(pilha != NULL) pilha->quantidade = 0; return pilha; } void destruirPilha(Pilha *pilha){ free(pilha); } int tamanhoPilha(Pilha *pilha){ if(pilha == NULL) return -1; else return pilha->quantidade; } int pilhaVazia(Pilha *pilha){ if(pilha == NULL) return -1; return (pilha->quantidade == 0); } int pilhaCheia(Pilha *pilha){ if(pilha == NULL) return -1; return (pilha->quantidade == MAX); } /*Colocar um nó*/ int push(Pilha *pilha, struct Aluno aln){ if(pilha == NULL || pilhaCheia(pilha)) return 0; pilha->aluno[pilha->quantidade] = aln; pilha->quantidade++; return 1; } /*Retirar um nó*/ int pop(Pilha *pilha){ if(pilha == NULL || pilhaVazia(pilha)) return 0; pilha->quantidade--; return 1; } int pull(Pilha *pilha, struct Aluno *aln){ if(pilha =
Responder
Clique aqui para fazer login e interagir na Comunidade :)