Escolar Documentos
Profissional Documentos
Cultura Documentos
Exercício 1: Crie uma função chamada criaPilhaque inicializa uma pilha vazia e a
retorna como um ponteiro.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
return 0;
}
Exercício 2: Crie uma função chamada empilhaque recebe uma pilha e um valor inteiro
como parâmetros e empilha o valor na pilha.
int main() {
Pilha* minhaPilha = criaPilha(); // no main é criada uma nova pilha chamada
minhaPilha, é criada chamandao a função criaPilha(). Ela aloca dinamicamente
memória para a pilha e a inicializa
printf("Pilha criada com sucesso!\n"); //é exibida a mensagem de que a pilha
foi criada com sucesso
return 0;
}
Neste exemplo, a função empilha verifica se a pilha não está cheia (limite definido
como MAX_TAMANHO) e, se não estiver cheia, empilha o valor passado como argumento
na pilha. O código cria uma pilha, empilha alguns valores nela e, em seguida,
libera a memória da pilha antes de encerrar o programa.
Exercício 3: Crie uma função chamada desempilhaque recebe uma pilha como parâmetro
e remove o elemento do topo da pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
void empilha(Pilha* pilha, int valor) {
if (pilha->topo == MAX_TAMANHO - 1) {
printf("Erro: Pilha cheia, não é possível empilhar o valor %d.\n", valor);
} else {
pilha->itens[++(pilha->topo)] = valor;
}
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
int valorDesempilhado = desempilha(minhaPilha);
printf("Valor desempilhado: %d\n", valorDesempilhado);
free(minhaPilha);
return 0;
}
Exercício 4: Crie uma função chamada topoPilhaquerecebe uma pilha como parâmetro e
retorna o elemento do topo da pilha sem removê-lo.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
Exercício 5: Crie uma função chamada tamanhoPilhaque recebe uma pilha como
parâmetro e retorna o número de elementos na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
void empilha(Pilha* pilha, int valor) {
if (pilha->topo == MAX_TAMANHO - 1) {
printf("Erro: Pilha cheia, não é possível empilhar o valor %d.\n", valor);
} else {
pilha->itens[++(pilha->topo)] = valor;
}
}
int tamanhoPilha(Pilha* pilha) {
return pilha->topo + 1; // O tamanho é o topo + 1
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
Exercício 6: Crie uma função chamada limpaPilhaque recebe uma pilha como parâmetro
e a esvazia, removendo todos os elementos.
#include <stdlib.h>
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
limpaPilha(minhaPilha);
printf("Pilha esvaziada.\n");
free(minhaPilha);
return 0;
}
Exercício 7: Crie uma função chamada copiaPilhaque recebe uma pilha como parâmetro
e retorna uma cópia da pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
free(minhaPilha);
free(copiaMinhaPilha);
return 0;
}
Exercício 8: Crie uma função chamada invertePilhaque recebe uma pilha como
parâmetro e inverte a ordem dos elementos na pilha original.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
invertePilha(minhaPilha);
free(minhaPilha);
return 0;
}
Exercício 9: Crie uma função chamada verificaPilhaVaziaque recebe uma pilha como
parâmetro e retorna verdadeiro se a pilha estiver vazia e falso caso contrário.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
free(minhaPilha);
return 0;
}
Exercício 10: Crie uma função chamada concatenaPilhasquerecebe duas pilhas como
parâmetros e concatena os elementos da segunda pilha no final da primeira pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* pilha1 = criaPilha();
Pilha* pilha2 = criaPilha();
empilha(pilha1, 10);
empilha(pilha1, 20);
empilha(pilha1, 30);
empilha(pilha2, 40);
empilha(pilha2, 50);
empilha(pilha2, 60);
concatenaPilhas(pilha1, pilha2);
free(pilha1);
free(pilha2);
return 0;
}
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
invertePilhaSemPilhaAuxiliar(minhaPilha);
free(minhaPilha);
return 0;
Exercício 12: Crie uma função chamada calculaMediaPilhaque recebe uma pilha de
números inteiros como parâmetro e retorna a média dos valores na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
free(minhaPilha);
return 0;
}
Exercício 13: Crie uma função chamada ordenaPilhaque recebe uma pilha de números
inteiros como parâmetro e a ordena em ordem crescente.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
empilha(pilhaAuxiliar, valor);
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 30);
empilha(minhaPilha, 10);
empilha(minhaPilha, 50);
empilha(minhaPilha, 20);
ordenaPilha(minhaPilha);
free(minhaPilha);
return 0;
}
Exercício 14: Crie uma função chamada copiaPilhaInvertidaque recebe uma pilha como
parâmetro e retorna uma cópia invertida da pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return copiaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
free(minhaPilha);
free(copiaInvertida);
return 0;
}
Exercício 15: Crie uma função chamada mesclaPilhasque recebe duas pilhas como
parâmetros e mescla os elementos das duas pilhas em uma terceira pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return pilhaMesclada;
}
int main() {
Pilha* pilha1 = criaPilha();
Pilha* pilha2 = criaPilha();
printf("Pilhas criadas com sucesso!\n");
empilha(pilha1, 10);
empilha(pilha1, 20);
empilha(pilha1, 30);
empilha(pilha2, 40);
empilha(pilha2, 50);
empilha(pilha2, 60);
printf("Pilha 1: ");
imprimirPilha(pilha1);
printf("\n");
printf("Pilha 2: ");
imprimirPilha(pilha2);
printf("\n");
free(pilha1);
free(pilha2);
free(pilhaMesclada);
return 0;
}
Exercício 16: Crie uma função chamada removeElementoPilhaque recebe uma pilha e um
valor como parâmetros e remove todas as ocorrências desse valor na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 20); // Incluindo uma segunda ocorrência de 20
free(minhaPilha);
return 0;
}
Exercício 17: Crie uma função chamada copiaNPrimeirosElementosque recebe uma pilha
e um número ncomo parâmetros e retorna uma cópia dos primeiros nelementos da pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
void empilha(Pilha* pilha, int valor) {
if (pilha->topo == MAX_TAMANHO - 1) {
printf("Erro: Pilha cheia, não é possível empilhar o valor %d.\n", valor);
} else {
pilha->itens[++(pilha->topo)] = valor;
}
}
int contador = 0;
return copiaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
free(minhaPilha);
free(copiaDosPrimeirosNElementos);
return 0;
}
Exercício 18: Crie uma função chamada copiaElementosMaioresque recebe uma pilha e
um valor limitecomo parâmetros e retorna uma cópia dos elementos maiores que o
limitena pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return copiaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
free(minhaPilha);
free(copiaDosElementosMaiores);
return 0;
}
Exercício 19: Crie uma função chamada copiaElementosMenoresque recebe uma pilha e
um valor limitecomo parâmetros e retorna uma cópia dos elementos menores que o
limitena pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return copiaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
free(minhaPilha);
free(copiaDosElementosMenores);
return 0;
}
Exercício 20: Crie uma função chamada insereOrdenadoPilhaque recebe uma pilha e um
valor como parâmetros e insere o valor na pilha de forma ordenada em ordem
crescente.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha criada com sucesso!\n");
insereOrdenadoPilha(minhaPilha, 30);
insereOrdenadoPilha(minhaPilha, 10);
insereOrdenadoPilha(minhaPilha, 50);
insereOrdenadoPilha(minhaPilha, 20);
insereOrdenadoPilha(minhaPilha, 40);
free(minhaPilha);
return 0;
}
Exercício 21: Crie uma função chamada somaElementosPilhaque recebe uma pilha como
parâmetro e retorna a soma de todos os elementos na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return soma;
}
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
free(minhaPilha);
return 0;
}
Exercício 22: Crie uma função chamada copiaPilhaque recebe uma pilha como parâmetro
e retorna uma cópia idêntica da pilha original.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return copia;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha original criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
free(minhaPilha);
free(copiaMinhaPilha);
return 0;
}
Exercício 23: Crie uma função chamada removeElementosParesque recebe uma pilha como
parâmetro e remove todos os elementos pares da pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha original criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 21);
empilha(minhaPilha, 30);
empilha(minhaPilha, 42);
empilha(minhaPilha, 53);
removeElementosPares(minhaPilha);
free(minhaPilha);
return 0;
}
Exercício 24: Crie uma função chamada inverteOrdemElementosque recebe uma pilha
como parâmetro e inverte a ordem dos elementos na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
inverteOrdemElementos(minhaPilha);
free(minhaPilha);
return 0;
}
Exercício 25: Crie uma função chamada tamanhoPilhaque recebe uma pilha como
parâmetro e retorna o número de elementos na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha original criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
free(minhaPilha);
return 0;
}
Exercício 26: Crie uma função chamada comparaPilhasque recebe duas pilhas como
parâmetros e verifica se elas são iguais (ou seja, têm os mesmos elementos na mesma
ordem).
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
if (valor1 != valor2) {
return 0; // Elementos diferentes, pilhas não são iguais
}
}
empilha(pilhaA, 10);
empilha(pilhaA, 20);
empilha(pilhaA, 30);
empilha(pilhaB, 10);
empilha(pilhaB, 20);
empilha(pilhaB, 30);
printf("Pilha A: ");
imprimirPilha(pilhaA);
printf("\n");
printf("Pilha B: ");
imprimirPilha(pilhaB);
printf("\n");
if (comparaPilhas(pilhaA, pilhaB)) {
printf("As pilhas A e B são iguais.\n");
} else {
printf("As pilhas A e B não são iguais.\n");
}
free(pilhaA);
free(pilhaB);
return 0;
}
Exercício 27: Crie uma função chamada intercalaPilhasque recebe duas pilhas como
parâmetros e cria uma terceira pilha com os elementos intercalados das duas pilhas
originais.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
if (pilhaB->topo != -1) {
int valorB = desempilha(pilhaB);
empilha(pilhaResultado, valorB);
empilha(pilhaAuxiliarB, valorB);
}
}
free(pilhaAuxiliarA);
free(pilhaAuxiliarB);
return pilhaResultado;
}
int main() {
Pilha* pilhaA = criaPilha();
Pilha* pilhaB = criaPilha();
empilha(pilhaA, 10);
empilha(pilhaA, 30);
empilha(pilhaA, 50);
empilha(pilhaB, 20);
empilha(pilhaB, 40);
printf("Pilha A: ");
imprimirPilha(pilhaA);
printf("\n");
printf("Pilha B: ");
imprimirPilha(pilhaB);
printf("\n");
free(pilhaA);
free(pilhaB);
free(pilhaC);
return 0;
}
Exercício 28: Crie uma função chamada removeElementoEspecificoque recebe uma pilha
e um valor como parâmetros e remove todas as ocorrências desse valor na pilha.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha original criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 20);
empilha(minhaPilha, 40);
free(minhaPilha);
return 0;
}
Exercício 29: Crie uma função chamada copiaInvertidaPilhaque recebe uma pilha como
parâmetro e retorna uma cópia invertida (em ordem contrária) da pilha original.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
return pilhaCopiaInvertida;
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha original criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 40);
empilha(minhaPilha, 50);
free(minhaPilha);
free(pilhaCopiaInvertida);
return 0;
}
Exercício 30: Crie uma função chamada pilhaEhPalindromoque recebe uma pilha como
parâmetro e verifica se ela representa um palíndromo. Um palíndromo é uma sequência
que é igual quando lida da esquerda para a direita e da direita para a esquerda.
typedef struct {
int itens[MAX_TAMANHO];
int topo;
} Pilha;
Pilha* criaPilha() {
Pilha* novaPilha = (Pilha*)malloc(sizeof(Pilha));
if (novaPilha == NULL) {
printf("Erro: Falha na alocação de memória para a pilha.\n");
exit(1);
}
novaPilha->topo = -1; // Inicializa o topo como -1 (pilha vazia)
return novaPilha;
}
if (elementoOriginal != elementoInvertido) {
free(pilhaInvertida);
return false; // Não é um palíndromo
}
}
free(pilhaInvertida);
return true; // É um palíndromo
}
int main() {
Pilha* minhaPilha = criaPilha();
printf("Pilha original criada com sucesso!\n");
empilha(minhaPilha, 10);
empilha(minhaPilha, 20);
empilha(minhaPilha, 30);
empilha(minhaPilha, 20);
empilha(minhaPilha, 10);
if (pilhaEhPalindromo(minhaPilha)) {
printf("A pilha representa um palíndromo.\n");
} else {
printf("A pilha NÃO representa um palíndromo.\n");
}
free(minhaPilha);
return 0;
}