

Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Exercício acadêmico de pilha em C
Tipologia: Exercícios
1 / 3
Esta página não é visível na pré-visualização
Não perca as partes importantes!
/*Uniessa 11/05/ Atividade em sala do segundo bimestre QUESTÃO 05 */ #include <stdio.h> #include <stdlib.h> #define MAX_P 5 int rPop; //variavel para o elemento do pop() typedef struct{ int valor[MAX_P]; int top; }TPilha; typedef TPilha *Ppilha; Ppilha criarPilha(){ Ppilha p = (Ppilha)malloc(sizeof(TPilha)); //Reservando espaco na memoria para a pilha p->top= -1; //Valor inicial do top para pilha vazia return p; } // metodo para o push int push(Ppilha p, int val){ if(p==NULL) //Pilha nao iniciada return -1; if(p->top>= (MAX_P -1)) //Pilha cheia return -1; p->top++; p->valor[p->top]=val; //incrementa posicao return 1; } //Metodo para o pop int pop(Ppilha p){ if(p==NULL) //Pilha nao foi iniciada return -1; if(p->top<0) //Pilha vazia return -1; rPop = p->valor[p->top]; //Guardando o valor do elemento no topo da pilha p->top--; //Decrementando por estar removendo elemento return 1; } //Definindo o metodo para liberar memoria usada pela pilha void liberarPilha(Ppilha p){ while(p->top>=0) //Enquanto o topo nao é menor que zero a pilha possui elementos
pop(p); //Remove os elementos free(p); //Liberando memoria usada. Contrario do malloc } //Metodo que imprime a pilha void imprimePilha(Ppilha p){ if(p==NULL) printf("Pilha nao iniciada"); //printf("\nNumero de elementos da pilha: %d",p->topo+1); int i; for(i=p->top;i>=0;i--) printf("\nPilha[%i]=%i\n",i,p->valor[i]); } //metodo para inversao da pilha int comparaPilha(Ppilha p, int elmt){ if(p==NULL) //Pilha nao foi iniciada return -1; if(p->top<0) //Pilha vazia return -1; int c = 0; //inicia contador de repetições int i; for(i=p->top;i>=0;i--){ //verifica se elemento a ser inserido na segunda pilha está na primeira. if(p->valor[i] == elmt){ c = 1; //flag repetição break;} } return c; } int main() { int elmt; //elemento da pilha int cont=0, repetidos = 0; // Ppilha p1, p2; p1 = criarPilha(); //inicia pilhas p2 = criarPilha(); printf("\nInsira %d numeros na pilha_1: ", MAX_P); while(cont < MAX_P){ scanf("%d", &elmt); push(p1,elmt); cont++; } cont = 0; printf("\nInsira %d numeros na pilha_2: ", MAX_P); while(cont < MAX_P){ scanf("%d", &elmt);