2
I am learning how to manipulate stacks in the Data Structure discipline, but having difficulties in implementing functions such as sorting and reeling is presenting errors in the scope of the if loop.
#include <stdio.h>
#include<stdlib.h>
#define MAX_SIZE 6
// Implementando a estrutura
typedef struct
{
int topo, item[MAX_SIZE];
}stack;
// Função Inicia Pilha
void iniciaPilha ( stack *p)
{
p->topo = -1; // O topo começa em -1,pq em 0 signicaria que estaria já na primeira posição
}
// Função Verifica se a pilha está Cheia
int pilhaCheia ( stack *p)
{
if (p->topo == (MAX_SIZE-1))
{
printf ("\n\n\t\tA Pilha esta Cheia!!!");
return 1;
}else
return 0;
}
// Função Verifica pilha Vazia
int pilhaVazia ( stack *p)
{
if (p->topo == -1)
{
printf ("\n\n\t\tA Pilha esta Vazia!!!");
return 1;
}
else
return 0;
}
// Função verifica se a 2 está pilha Vazia
int pilhaVazia2 (stack *p)
{
if (p->topo == -1) // O topo começa em -1,pq em 0 signicaria que estaria já na primeira posição
return 1;
else
return 0;
}
// Função Empilha
int push ( stack *p, int valor)
{
return (p->item[++(p->topo)] = valor);// retornar ao valor do topo
}
// Função Desempilha
int pop ( stack *p)
{
int aux;
aux = p->item[(p->topo)--]; //decrementando o topo, ou seja, desempilhando os elementos
return aux;
}
// Função Mostra Pilha
int mostra (stack *p)
{
int aux;
if (pilhaVazia2 (p))
return 1;
else
{
aux = pop (p);
printf ("%d,", aux);
mostra (p);
return 0;
}
}
// Função reempilha
int reempilha ( stack *p, stack *pPilhaB, stack *pPilhaC)
{
int aux;
if (pilhaVazia (p)&&pilhaVazia (pPilhaB))
return 1;
else
{
if ((p->item[p->topo]&&(pPilhaB->item[pPilhaB->topo]))//se o topo estiver com uma valor reempilha os valores de A em B
{
aux = pop (p)&&pop(pPilhaB);
push (pPilhaC, aux);
//push (pPilhaB, aux);
}
reempilha (p, pPilhaB, pPilhaC); // chamando a função para reempilhar os elementos em
return 0;
}
}
// Funcao para pegar os valores a empilhar
int empilha ( stack *p)
{
int valor;
printf ("\n\nInforme os seis valores para ser empilhado ou -2 para mostrar os valores de B ");
scanf ("%d",&valor);
if (pilhaCheia (p))
return 1;
else
{
if (valor == -2)// se o numero -2 for digitado então os valores impares e pares serão colocados
return 0;
else
{
push (p, valor);
empilha (p);
return 0;
}
}
}
int ordenar( stack *p, stack *pPilhaB, stack *pPilhaC){
// pilhac=para receber os elementos desempilhados e ordenados
int aux;//variavel para comparar os elementos
if (pilhaVazia (p)&&pilhaVazia (pPilhaB))//se a pilha estiver vazia retorno 0, não existe ainda ordenação
return 0;
pop (p)&&pop(pPilhaB);// Vou ter que desempilhar um unico elemento de cada pilha
if ((p->item[p->topo]>=(pPilhaB->item[pPilhaB->topo])) //se o topo estiver com uma valor reempilha os valores de A em B
{
aux = pop (p)&&pop(pPilhaB);// aux vai receber os elemntos do topo das duas pilhas
empilha(pPilhaC);
}
ordenar (p, pPilhaB, pPilhaC); // chamando a função para reempilhar os elementos em
return 1;
}
// Função principal
int main ()
{
stack pilha, pilha_pPilhaB, pilha_pPilhaC;
iniciaPilha (&pilha);
iniciaPilha (&pilha_pPilhaB);
iniciaPilha (&pilha_pPilhaC);
push(&pilha, 6);
push(&pilha, 4);
push(&pilha, 1);
printf("\nOs valores da pilha A = :"); // Mostrando na tela os valores
mostra(&pilha);
printf("\n\n\n");
push(&pilha_pPilhaB, 5);
push(&pilha_pPilhaB, 3);
push(&pilha_pPilhaB, 2);
printf("\nOs valores da pilha B = :"); // Mostrando na tela os valores
mostra(&pilha_pPilhaB);
printf("\n\n\n");
iniciaPilha (&pilha_pPilhaC);
ordenar ( &pilha,&pilha_pPilhaB,&pilha_pPilhaC);
printf ("\nOs valores ordenados na pilha C = :"); // Mostrando na tela os valores
mostra (&pilha_pPilhaC);
printf("\n\n\n");
return 0;
}
I want to know if the sort function is correct, besides I’m having difficulties in the rebuild function
– Jordana Lopes
Josélia, it is in the body of the question, not in the title. Try to answer the following in the body of the question: 1) What am I trying to do? 2) What have I ever done? 3) What difficulty am I having?
– user28595
The tag is wrong, this is not C#.
– ramaral
Ready I fixed!!
– Jordana Lopes
Where is the explanation of the problem you had posed? It was good, add again before the code.
– user28595