pilhas em c DE NOVO

1. pilhas em c DE NOVO

Daniel
danielcrvg

(usa Slackware)

Enviado em 02/04/2013 - 00:19h

Galera estou tentando entender as pilhas e estou estudando este codigo retirado do livro do Tenenbaum. So que nao estou conseguindo testar as funcoes pop e push..

O codigo segue abaixo, e gostaria da opiniao de quem é mais experiente..



#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

enum boolean {
TRUE = 1, FALSE=0
};
typedef enum boolean bool;


#define STACKSIZE 100

struct stack {
int top;
int items[STACKSIZE]
};
struct stack s;


//FUNCAO PARA SABER SE PILHA ESTA VAZIA
empty(ps)
struct stack *ps;
{
if (ps->top == NULL) {
return(TRUE);
} else {
return(FALSE);
}
}

//FUNCAO 01 PARA RETIRAR ELEMENTOS DA PILHA
pop(ps)
struct stack *ps;
{
if (empty(ps)) {
printf("%s", "stack underflow");
exit(1);
}
return (ps->items[ps->top~]);
}


//FUNCAO 02 PARA RETIRAR ELEMENTOS DA PILHA
/*
pop(ps)
struct stack *ps;
{
if (!empty(&s)) {
int x = pop(&s);
} else {
printf("\nSTACK UNDERFLOW - Pilha Vazia!!\n");
}
}
*/

//FUNCAO PARA ADD ELEMENTOS NA PILHA
push(ps, x)
struct stack *ps;
int x;
{
if (ps->top == STACKSIZE-1) {
printf("%s", "\nestouro de pilha\n\n");
exit(1);
} else {
ps->items[++(ps->top)]=x;
printf("\nItem inserido\n");
return;
}
}

int main() {


if (empty(&s)) {
printf("\nPilha vazia!!\n\n");
} else {
printf("\nPilha com elementos!!\n");
}

//push(ps, 5);


if (empty(&s)) {
printf("\nPilha vazia!!\n\n");
} else {
printf("\nPilha com elementos!!\n");
}


return 0;
}




  


2. Re: pilhas em c DE NOVO

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/04/2013 - 00:44h

Está dando alguma mensagem de erro?


3. Re: pilhas em c DE NOVO

Daniel
danielcrvg

(usa Slackware)

Enviado em 02/04/2013 - 09:19h

Bem, eu consegui testar a push, mas a pop ta dando zica...


A push() eu estou testando desta maneria, e pelo menos nao esta dando erro, e esta retornando a mensagem que eu deixei na funcao pra confirmar a insercao do elemento..


int main() {


if (empty(&s)) {
printf("\nPilha vazia!!\n\n");
} else {
printf("\nPilha com elementos!!\n");
}

push(&s, 5);

if (empty(&s)) {
printf("\nPilha vazia!!\n\n");
} else {
printf("\nPilha com elementos!!\n");
}


//int y = pop(&s);


return 0;
}



A resposta é:
dani3l@blackpearl:~$ ./pilhas.out

Pilha vazia!! <--- Aqui refere-se ao primeiro if que testa a funcao empty(), ate aqui nao inseri nenhum elemento.
<--- neste momento eu faco a insercao com o push(&s, 5);

Item inserido <--- Retorna a mensagem da funcao confirmando a insercao

Pilha com elementos!! <--- Refere-se ao if que testa a funcao empty() dizendo q a pilha tem elementos..
dani3l@blackpearl:~$



Agora o primeiro metodo do pop() eu testo assim:


int main() {


if (empty(&s)) {
printf("\nPilha vazia!!\n\n");
} else {
printf("\nPilha com elementos!!\n");
}

push(&s, 5);

if (empty(&s)) {
printf("\nPilha vazia!!\n\n");
} else {
printf("\nPilha com elementos!!\n");
}


int y = pop(&s);


return 0;
}


e retorna assim:

dani3l@blackpearl:~$ ./pilhas.out

Pilha vazia!!


Item inserido

Pilha com elementos!!
Segmentation fault



Se eu utilizo o outro metodo da funcao pop() ele retorna erro na compilacao:
dani3l@blackpearl:~$ gcc pilhas.c -o pilhas.out
pilhas.c:17:1: warning: no semicolon at end of struct or union [enabled by default]
pilhas.c: In function 'empty':
pilhas.c:25:15: warning: comparison between pointer and integer [enabled by default]
pilhas.c: In function 'pop': <-----
pilhas.c:40:28: error: expected ']' before '~' token <----


















Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts