Ir ao conteúdo

Problema com Pilha


Sylerr

Posts recomendados

Postado

tava tentando relembra implementação de Pilha, Filas Arvore etc etc...

só na pilha que to me embaçando ^^

Na parte de EXCLUIR um elemento da pilha.

ele exclui um e no segundo, OVERFLOW sempre :s


#include<stdio.h> // necessário para executar printf
#include <conio.h> // necessário para utilizar getche
#include <iostream.h> // Cin Cout
#include <stdlib.h>



int V_P[10], TamP = 10;
int topo = -1;

int V_P2[10], TamP2 = 10;
int topo2 = -1;


//void INSERIR(int *t, int P[], int valor);

void MOSTRA(int pilha[])
{ int i;
system("cls");
for (i=9;i>-1;i--)
printf ("\n%d %d",i,pilha[i]);
printf("\n");
printf("\n");
getche();
}



int INSERIR(int *t, int P[], int valor)
{
if (*t == TamP-1)
{ printf("Overflow!");
getche();
}
else { *t= *t + 1;
P[*t] = valor;
}
}


int RETIRA(int *t, int P[])
{ if (*t >= 0)
{ P[*t] = 0;
*t= *t-1;
}
else { printf("\nUnderflow.");
getche();
}
}

void TROCA (int pilha1[], int pilha2[])
{
topo = -1;
for(int i=0;i<TamP;i++)
{
INSERIR(&topo,pilha1,pilha2[i]);
}
}

void EXCLUI(int *Topo, int *Topo2, int pilha[],int pilha2[], int numero)
{
printf("%d aaa",*Topo);
getch();
for(int i =0;i<TamP;i++)
{
if( pilha[i] != numero)
{
*Topo = *Topo - 1;
INSERIR(&topo2,V_P2,pilha[i]);

}
}
TROCA(V_P,V_P2);
}





int main()
{
int op=0,num=0;
do { printf("1- Inserir\n");
printf("2- Retirar\n");
printf("3- Exlcuir\n");
printf("9- Fim\n");
printf("Digito: ");
scanf("%d",&op);

if (op == 1)
{
printf("Informe um Valor: ");
scanf("%d",&num);
INSERIR(&topo, V_P,num);
}

if (op == 2) { RETIRA(&topo, V_P); }

if (op == 3)
{
printf("Informe o Numero a ser Exlcuido: ");
scanf("%d",&num);
EXCLUI(&topo,&topo2,V_P,V_P2,num);
getch();

}




MOSTRA(V_P);
} while (op != 9);

system("PAUSE");
return 0;
}

alguém se dispoe a da uma olhada e ve se encontra esse erro?

att.

Postado

sim, teoricamente não poderia, mas é um trabalho de faculdade qe to fazendo, to quase resolvendo isso, porém to quebrando a cabeça com isso kkk

porque eu consegui faze isso uns tempos atras mas não tinha mais o programa pronto com essa função de EXCLUIR

Postado

Uma duvida.. como deveria funcionar esta exclusão?

seria como "tirar e a pilha, com um espaço vazio, ficar uma parte flutuando" e ponto ou "tirar e todos os livros de cima ocuparem o espaço vazio"?

Postado

isso, tiro um livro do meio e os de cima cai pra baixo


l4
l3
l2
l1

tiro l2

ficaria

l4
l3
l1

mudei agora mas acho qe ainda não funciona 100%



#include<stdio.h> // necessário para executar printf
#include <conio.h> // necessário para utilizar getche
#include <iostream.h> // Cin Cout
#include <stdlib.h>



int V_P[10], TamP = 10;
int topo = -1;

int V_P2[10], TamP2 = 10;
int topo2 = -1;


//void INSERIR(int *t, int P[], int valor);

void MOSTRA(int pilha[])
{ int i;
system("cls");
for (i=9;i>-1;i--)
printf ("\n%d %d",i,pilha[i]);
printf("\n");
printf("\n");
getche();
}



int INSERIR(int *t, int P[], int valor)
{
if (*t == TamP-1)
{ printf("Overflow!");
getche();
}
else { *t= *t + 1;
P[*t] = valor;
}
}


int RETIRA(int *t, int P[])
{ if (*t >= 0)
{ P[*t] = 0;
*t= *t-1;
}
else { printf("\nUnderflow.");
getche();
}
}

void TROCA (int pilha1[], int pilha2[])
{
topo = -1;
for(int i=0;i<TamP;i++)
{
INSERIR(&topo,pilha1,pilha2[i]);
}
}

void EXCLUI(int *Topo, int *Topo2, int pilha[],int pilha2[], int numero)
{
for(int i=*Topo;i>=0;i--)
{

if(pilha[i] != numero)
{
INSERIR(&topo2,V_P2,pilha[i]);
*Topo = *Topo -1;

}
else{
break;
}
}
for(int i=*Topo2;i>=0;i--)
{
INSERIR(&topo,pilha,pilha2[i]);
*Topo2 = *Topo2 -1;
}
}





int main()
{
int op=0,num=0;
do { printf("1- Inserir\n");
printf("2- Retirar\n");
printf("3- Exlcuir\n");
printf("9- Fim\n");
printf("Digito: ");
scanf("%d",&op);

if (op == 1)
{
printf("Informe um Valor: ");
scanf("%d",&num);
INSERIR(&topo, V_P,num);
}

if (op == 2) { RETIRA(&topo, V_P); }

if (op == 3)
{
printf("Informe o Numero a ser Exlcuido: ");
scanf("%d",&num);
EXCLUI(&topo,&topo2,V_P,V_P2,num);
getch();

}




MOSTRA(V_P);
} while (op != 9);

system("PAUSE");
return 0;
}

o professor la falou, qe o for tem qe se iniciando no Topo e indo até o começo da pilha

e i inserindo na pilha aux até chegar no numero qe eu quero excluir, e depois passa da aux pra pilha pra pode tira esse qe eu queira, só qe isso ta meio complicando (a lógica) kk

seria +- a lógica de FILA, realocar nos espaços vazios

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...