-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
2 changed files
with
282 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
// importando pacotes | ||
|
||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <stdbool.h> | ||
|
||
// definindo tamanho padrao do vetor | ||
|
||
#define MAX 50 | ||
|
||
// criando estruturas | ||
|
||
typedef struct | ||
{ | ||
int chave; | ||
|
||
} REGISTRO; | ||
|
||
typedef struct | ||
{ | ||
REGISTRO V[MAX]; | ||
int topo1; | ||
int topo2; | ||
|
||
} DUAS_PILHAS_EST; | ||
|
||
// declarando funcoes | ||
|
||
void inicializacao(DUAS_PILHAS_EST *p); | ||
void exibicaoPilhaK(DUAS_PILHAS_EST *p, int k); | ||
|
||
int tamanhoPilhaK(DUAS_PILHAS_EST *p, int k); | ||
int popPilhaK(DUAS_PILHAS_EST *p, int k); | ||
|
||
bool vetorEstaCheio(DUAS_PILHAS_EST *p); | ||
bool pushPilhaK(DUAS_PILHAS_EST *p, int k, int ch); | ||
|
||
// implementando funcoes | ||
|
||
void inicializacao(DUAS_PILHAS_EST *p) | ||
{ | ||
p->topo1 = -1; | ||
p->topo2 = MAX; | ||
|
||
} | ||
|
||
void exibicaoPilhaK(DUAS_PILHAS_EST *p, int k) | ||
{ | ||
if(k == 1) | ||
{ | ||
int i; | ||
for(i = p->topo1; i >= 0; i--) printf("%d ", p->V[i].chave); | ||
|
||
} else if (k == 2) { | ||
|
||
int j; | ||
for(j = p->topo2; j < MAX; j++) printf("%d ", p->V[j].chave); | ||
|
||
} | ||
|
||
} | ||
|
||
int tamanhoPilhaK(DUAS_PILHAS_EST *p, int k) | ||
{ | ||
if(k == 1) | ||
{ | ||
return (p->topo1 + 1); | ||
|
||
} else if (k == 2) { | ||
|
||
return (MAX - p->topo2); | ||
} | ||
|
||
} | ||
|
||
int popPilhaK(DUAS_PILHAS_EST *p, int k) | ||
{ | ||
int resp = -1; // se a pilha estiver vazia | ||
|
||
if(k == 1 && p->topo1 != -1) | ||
{ | ||
resp = p->V[p->topo1].chave; // se for a pilha 1 com elemente | ||
p->topo1--; | ||
|
||
} else if (k == 2 && p->topo2 < MAX) { | ||
|
||
resp = p->V[p->topo2].chave; // se for a pilha 2 com elementos | ||
p->topo2++; | ||
|
||
} | ||
|
||
return(resp); | ||
|
||
} | ||
|
||
bool vetorEstaCheio(DUAS_PILHAS_EST *p) | ||
{ | ||
if(p->topo2 - p->topo1 == 1) return (true); | ||
else return (false); | ||
|
||
} | ||
|
||
bool pushPilhaK(DUAS_PILHAS_EST *p, int k, int ch) | ||
{ | ||
if(vetorEstaCheio(p) == true) | ||
{ | ||
return (false); | ||
|
||
} else { | ||
|
||
if(k == 1) | ||
{ | ||
p->topo1++; | ||
p->V[p->topo1].chave = ch; | ||
|
||
} else if (k == 2) { | ||
|
||
p->topo2--; | ||
p->V[p->topo2].chave = ch; | ||
|
||
} | ||
|
||
return (true); | ||
|
||
} | ||
|
||
} | ||
|
||
// funcao main | ||
|
||
int main() | ||
{ | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
// importando pacotes | ||
|
||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <stdbool.h> | ||
|
||
// definindo tamanho do vetor e qtd de pilhas | ||
|
||
#define MAX 50 | ||
#define NP 5 | ||
|
||
// criando estruturas | ||
|
||
typedef struct | ||
{ | ||
int chave; | ||
|
||
} REGISTRO; | ||
|
||
typedef struct | ||
{ | ||
REGISTRO V[MAX]; | ||
int base[NP + 1]; | ||
int topo[NP + 1]; | ||
|
||
} NP_PILHAS; | ||
|
||
// declarando funcoes | ||
|
||
void inicializacao(NP_PILHAS *p); | ||
void exibicaoDaPilhaK(NP_PILHAS *p, int k); | ||
|
||
int tamDaPilhaK(NP_PILHAS *p, int k); | ||
int popPilhaK(NP_PILHAS *p, int k); | ||
|
||
bool pilhaKestaCheia(NP_PILHAS *p, int k); | ||
bool deslocaPilhaKparaDir(NP_PILHAS *p, int k); | ||
bool deslocaPilhaKparaEsq(NP_PILHAS *p, int k); | ||
bool pushPilhaK(NP_PILHAS *p, int k, int ch); | ||
|
||
// implementando funcoes | ||
|
||
void inicializacao(NP_PILHAS *p) | ||
{ | ||
int i; | ||
for(i = 0; i <= NP; i++) | ||
{ | ||
p->base[i] = ((MAX / NP) * i) - 1; | ||
p->topo[i] = p->base[i]; | ||
|
||
} | ||
|
||
|
||
} | ||
|
||
void exibicaoDaPilhaK(NP_PILHAS *p, int k) | ||
{ | ||
int i; | ||
for(i = p->base[k] + 1; i <= p->topo[k]; i++) printf("%d ", p->V[i].chave); | ||
printf("\n"); | ||
|
||
} | ||
|
||
int tamDaPilhaK(NP_PILHAS *p, int k) | ||
{ | ||
return (p->topo[k] - p->base[k]); | ||
|
||
} | ||
|
||
int popPilhaK(NP_PILHAS *p, int k) | ||
{ | ||
if(k < 0 || k >= NP || p->topo[k] == p->base[k]) return (-1); // lista vazia ou indice invalido | ||
|
||
int resp = p->V[p->topo[k]].chave; | ||
p->topo[k]--; | ||
|
||
return (resp); | ||
|
||
} | ||
|
||
bool pilhaKestaCheia(NP_PILHAS *p, int k) | ||
{ | ||
if(p->topo[k] == p->base[k + 1]) return (true); | ||
else return (false); | ||
|
||
} | ||
|
||
bool deslocaPilhaKparaDir(NP_PILHAS *p, int k) | ||
{ | ||
if(k < 1 || k >= NP || pilhaKestaCheia(p, k) == true) return (false); // sem espaco ou indice invalido | ||
|
||
int i; | ||
for(i = p->topo[k] + 1; i > p->base[k]; i--) p->V[i].chave = p->V[i - 1].chave; | ||
|
||
p->topo[k]++; | ||
p->base[k]++; | ||
|
||
return (true); | ||
|
||
} | ||
|
||
bool deslocaPilhaKparaEsq(NP_PILHAS *p, int k) | ||
{ | ||
if(k < 1 || k >= NP || pilhaKestaCheia(&p, k - 1) == true) return (false); // sem espaco ou indice invalido | ||
|
||
int i; | ||
for(i = p->base[k]; i >= p->topo[k] ; i++) p->V[i].chave = p->V[i + 1].chave; | ||
|
||
p->topo[k]--; | ||
p->base[k]--; | ||
|
||
return (true); | ||
|
||
} | ||
|
||
bool pushPilhaK(NP_PILHAS *p, int k, int ch) | ||
{ | ||
int i; | ||
|
||
if(pilhaKestaCheia(p, k) == true && k < NP - 1) | ||
{ | ||
for(i = NP - 1; i > k; i--) deslocaPilhaKparaDir(p, i); | ||
|
||
} else if(pilhaKestaCheia(p, k) == true && k > 0) | ||
{ | ||
for(i = 1; i < k + 1; i++) deslocaPilhaKparaEsq(p, i); | ||
|
||
} | ||
|
||
if(pilhaKestaCheia(p, k) == false) | ||
{ | ||
p->topo[k]++; | ||
p->V[p->topo[k]].chave = ch; | ||
|
||
return (true); | ||
|
||
} else return (false); | ||
|
||
} | ||
|
||
// funcao main | ||
|
||
int main() | ||
{ | ||
|
||
return 0; | ||
} |