Skip to content

Instantly share code, notes, and snippets.

@alvadorn
Last active December 3, 2017 03:05
Show Gist options
  • Select an option

  • Save alvadorn/b168781b45948fb3e683d1114e7ee137 to your computer and use it in GitHub Desktop.

Select an option

Save alvadorn/b168781b45948fb3e683d1114e7ee137 to your computer and use it in GitHub Desktop.
struct pilha_ {
int *dados;
int capacidade;
int tamanho;
};
typedef struct pilha_ Pilha;
Pilha *criaPilha(int capacidade) {
Pilha *pilha = (Pilha *) malloc(sizeof(Pilha));
pilha->dados = (int*) malloc(sizeof(int) * capacidade);
pilha->capacidade = capacidade;
pilha->tamanho = 0;
return pilha;
}
void push(Pilha *pilha, int dado) {
if (pilha->tamanho < pilha->capacidade) {
pilha->dados[(pilha->tamanho)++] = dado;
}
}
int vazia(Pilha *pilha) {
if (pilha->tamanho > 0) {
return 0;
}
return 1;
}
int pop(Pilha *pilha) {
if (pilha->tamanho > 0) {
return pilha->dados[(pilha->tamanho)--];
} else {
printf("Pilha vazia");
}
}
void esvazia(Pilha *pilha) {
free(pilha->dados);
free(pilha);
}
int compara(Pilha *pilha1, Pilha *pilha2) {
int igual = 1;
if (pilha1->tamanho == pilha2->tamanho) {
Pilha *aux1 = criaPilha(pilha1->capacidade);
Pilha *aux2 = criaPilha(pilha2->capacidade);
int dado1, dado2;
while (!vazia(pilha1)) {
dado1 = pop(pilha1);
dado2 = pop(pilha2);
if (dado1 != dado2) {
igual &= 0;
}
push(aux1, dado1);
push(aux2, dado2);
}
// re-empilhando
while (!vazia(aux1)) {
dado1 = pop(aux1);
dado2 = pop(aux2);
push(pilha1, dado1);
push(pilha2, dado2);
}
esvazia(aux1);
esvazia(aux2);
} else {
igual = 0;
}
return igual;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment