Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, alguém poderia me ajudar nesses exercícios de fila e pilha? Agradeço desde já (:

>
19 minutos atrás, _Isis_ disse:
O que você já fez?
Não consegui a parte de retornar o resultado do numero de elementos da maior pilha
e na questão 2, como fazer para trocar os elementos
você conta os elementos de cada pilha separadamente e retorna o maior valor.
Na segunda questão você sempre vai retirar o primeiro elemento da fila e adicionar ao final da outra.
Tive que fazer algumas adaptações como por exemplo criar as pilhas com uma posição a mais pra sinalizar que as pilhas estão vazias por que com esses parâmetros nao há como mudar os valores dos ponteiros de pilha entre as chamadas de funções.
#include<stdlib.h>
typedef struct pilha{
float valor;
}Pilha;
void pilha_push(Pilha *p1, float valor){
p1++;
p1->valor=valor;
}
float pilha_pop(Pilha *p1){
return p1->valor;
}
int pilhavazia(Pilha *p1){
if(p1->valor==-1)
return 1;
else
return 0;
}
int numelementodamaior(Pilha p1,Pilha p2){
float pilhaauxiliar[20];
int i,contadorpilha1=0,contadorpilha2=0;
while(!pilhavazia(p1)){
pilhaauxiliar[contadorpilha1]=pilha_pop(p1--); //O -- no ponteiro foi uma de minhas adaptacoes
contadorpilha1++;
}
for(i=contadorpilha1-1;i>=0;i--)
pilha_push(p1,pilhaauxiliar[i]);
while(!pilhavazia(p2)){
pilhaauxiliar[contadorpilha2]=pilha_pop(p2--);
contadorpilha2++;
}
for(i=contadorpilha2-1;i>=0;i--)
pilha_push(p2,pilhaauxiliar[i]);
if(contadorpilha1>contadorpilha2)
return contadorpilha1;
else
return contadorpilha2;
}
int main(){
Pilha p1[11],
p2[11],*p1ptr=p1,*p2ptr=p2;
p1[0].valor=-1;//-1 na primeira posicao significa pilha vazia. Os valores inseridos virao a partir da segunda posicao e em diante.
p2[0].valor=-1;
/*Aqui se insere quantos valores quiser nas duas pilhas sempre apos isso apontando os ponteiros de pilha para as posicoes das pilhas aonde estiverem os ultimos elementos que foram inseridos*/
printf("Numero de elementos da maior pilha:%d",numelementodamaior(p1ptr,p2ptr));
system("pause");
}
#include<stdlib.h>
typedef struct fila{
int valor;
struct fila *proximo;
}Fila;
Fila *fila_cria(){
return malloc(sizeof(Fila));
}
int fila_retira(Fila *f){
int valor;
while(f->proximo)
f=f->proximo;
valor=f->valor;
f->proximo=NULL;
return valor;
}
void fila_insere(Fila *f,int v){
while(f->proximo)
f=f->proximo;
f->proximo=malloc(sizeof(Fila));
f->proximo->valor=v;
f->proximo->proximo=NULL;
}
void TrocaElementos(Fila f1,Fila f2,int n){
int i,auxiliar;
for(i=0;i<n;i++)
if(!f1->proximo){
i++;
break;
}
if(n>i)
printf("n e maior do que uma das filas. A troca nao pode ser feita.");
else{
for(i=0;i<n;i++)
if(!f2->proximo){
i++;
break;
}
if(n>i)
printf("n e maior do que uma das filas. A troca nao pode ser feita.");
else
for(i=0;i<n;i++){
auxiliar=f1->valor;
f1->valor=f2->valor;
f2->valor=auxiliar;
f1=f1->proximo;
f2=f2->proximo;
}
}
}
void imprimefila(Fila *f){
do{
printf("%d\n",f->valor);
f=f->proximo;
}while(f);
}
int main(){
Fila *f1=fila_cria(),*f2=fila_cria();
f1->valor=5;
f1->proximo=NULL;
f2->valor=10;
f2->proximo=NULL;
fila_insere(f1,12);
fila_insere(f2,13);
TrocaElementos(f1,f2,1);
imprimefila(f1);
system("pause");
}
O que você já fez?