Enviado em 14/03/2010 - 12:53h
Bom Galera, sou novato em programação e estou com algumas dificuldades pra finalizar uma estrutura de pilha. abaixo segue o codigo. Se puderem dar uma força agradeço :P.
o Main ------------------------------------------------------------
#include "biblioteca.h"
int main(int argc, char *argv[]) {]
typedef struct pilha { /* cria pilha */
int n;
int topo=(-1);
int PILHA[N];
} Pilha;
Pilha* pilha_cria (void) {
Pilha* p = (Pilha*)malloc(sizeof(Pilha));
p->topo = 0; //inicializa com zero elementos
return p;
}
char op;
do {
printf ("\nMenu");
printf ("\n\nI - Insere");
printf ("\nR - Remover");
printf ("\nT - Topo");
printf ("\nS - Sair");
printf ("\n\nInforme a operacao desejada: ");
fflush (stdin);
scanf ("%c", &op);
op = my_toupper (op);
system ("cls");
switch (op) {
case 'I':
printf ("Informe o valor que deseja inserir: ");
fflush (stdin);
scanf ("%d",&p);
system ("pause");
system ("cls");
if (pilha_insere()){
printf ("O valor - %d - foi inserido\n", (p));
}
else {
printf ("O valor - %d - NAO foi Inserido - A pilha esta cheia\n\n", p);
}
break;
system ("pause");
system ("cls");
case 'R':
printf (" -- Removendo dados da pilha --\n");
fflush (stdin);
if (pilha_remove()) {
printf ("O valor - %d - foi removido\n", p);
}
else {
printf ("NAO foi removido - A Pilha esta vazia\n\n");
}
break;
system ("pause");
system ("cls");
case 'T':
printf ("-- Mostra valor do topo da pilha --\n");
fflush (stdin);
int x;
a=pilha_top();
if (x) {
printf ("Elemento do topo %d\n", x);
}
else {
printf ("NAO existe elemento no topo - Pilha vazia\n");
}
break;
system ("pause");
system ("cls");
default:
if (op == 'S') {
printf ("Saindo...\n");
}
else {
printf ("Operacao invalida\n");
}
}
system ("pause");
}while (op != 'S');
system("pause");
return 0;
}
Biblioteca.c -------------------------------------------------
#include "biblioteca.h"
#define N 5
/* insere pilha */
void pilha_insere (Pilha* p, int v) {
if (pilha_cheia (p)) { //verifica se a capacidade do vetor foi esgotada
printf ("A pilha ficou cheia!\n");
return (0);
}
p->PILHA[p->topo] = v; /*insere o novo elemento na próxima posição livre*/
p->topo++;
}
int pilha_remove (Pilha*p) { /* remove pilha */
int v;
if (pilha_vazia (p)) {
printf ("Pilha está vazia!\n");
return (0);
}
v = p->PILHA[p->(topo-1)]; /*agora retira o elemento do topo da pilha*/
p->topo--;
return v;
}
int pilha_vazia (Pilha* p) { /* pilha vazia */
return (p->topo == (-1));
}
int pilha_cheia(Pilha* p) { /* pilha cheia */
return (topo == (N-1));
}
int pilha_top (void) { /* topo da pilha */
if (!pilha_vazia(p)){
return (PILHA[topo]);
}
return (0);
}
biblioteca.h ----------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
(void) pilha_cria (int p);
(void) pilha_insere (int p, int v);
(int) pilha_remove (int p);
(int) pilha_vazia (int p);
(int) pilha_cheia(int p);
(int) pilha_top (void);
conto com a ajuda de vcs!
o Main ------------------------------------------------------------
#include "biblioteca.h"
int main(int argc, char *argv[]) {]
typedef struct pilha { /* cria pilha */
int n;
int topo=(-1);
int PILHA[N];
} Pilha;
Pilha* pilha_cria (void) {
Pilha* p = (Pilha*)malloc(sizeof(Pilha));
p->topo = 0; //inicializa com zero elementos
return p;
}
char op;
do {
printf ("\nMenu");
printf ("\n\nI - Insere");
printf ("\nR - Remover");
printf ("\nT - Topo");
printf ("\nS - Sair");
printf ("\n\nInforme a operacao desejada: ");
fflush (stdin);
scanf ("%c", &op);
op = my_toupper (op);
system ("cls");
switch (op) {
case 'I':
printf ("Informe o valor que deseja inserir: ");
fflush (stdin);
scanf ("%d",&p);
system ("pause");
system ("cls");
if (pilha_insere()){
printf ("O valor - %d - foi inserido\n", (p));
}
else {
printf ("O valor - %d - NAO foi Inserido - A pilha esta cheia\n\n", p);
}
break;
system ("pause");
system ("cls");
case 'R':
printf (" -- Removendo dados da pilha --\n");
fflush (stdin);
if (pilha_remove()) {
printf ("O valor - %d - foi removido\n", p);
}
else {
printf ("NAO foi removido - A Pilha esta vazia\n\n");
}
break;
system ("pause");
system ("cls");
case 'T':
printf ("-- Mostra valor do topo da pilha --\n");
fflush (stdin);
int x;
a=pilha_top();
if (x) {
printf ("Elemento do topo %d\n", x);
}
else {
printf ("NAO existe elemento no topo - Pilha vazia\n");
}
break;
system ("pause");
system ("cls");
default:
if (op == 'S') {
printf ("Saindo...\n");
}
else {
printf ("Operacao invalida\n");
}
}
system ("pause");
}while (op != 'S');
system("pause");
return 0;
}
Biblioteca.c -------------------------------------------------
#include "biblioteca.h"
#define N 5
/* insere pilha */
void pilha_insere (Pilha* p, int v) {
if (pilha_cheia (p)) { //verifica se a capacidade do vetor foi esgotada
printf ("A pilha ficou cheia!\n");
return (0);
}
p->PILHA[p->topo] = v; /*insere o novo elemento na próxima posição livre*/
p->topo++;
}
int pilha_remove (Pilha*p) { /* remove pilha */
int v;
if (pilha_vazia (p)) {
printf ("Pilha está vazia!\n");
return (0);
}
v = p->PILHA[p->(topo-1)]; /*agora retira o elemento do topo da pilha*/
p->topo--;
return v;
}
int pilha_vazia (Pilha* p) { /* pilha vazia */
return (p->topo == (-1));
}
int pilha_cheia(Pilha* p) { /* pilha cheia */
return (topo == (N-1));
}
int pilha_top (void) { /* topo da pilha */
if (!pilha_vazia(p)){
return (PILHA[topo]);
}
return (0);
}
biblioteca.h ----------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
(void) pilha_cria (int p);
(void) pilha_insere (int p, int v);
(int) pilha_remove (int p);
(int) pilha_vazia (int p);
(int) pilha_cheia(int p);
(int) pilha_top (void);
conto com a ajuda de vcs!