Ir para o conteúdo
xintect

Dúvidas em Estruturas de Stacks

Mensagens Recomendadas

xintect

Boa tarde, estou a fazer uns exercícios sobre stacks em c e dão-me a seguinte estrutura :

typedef struct stack {
int size; // guarda o tamanho do array valores
int sp;
int *valores;
} STACK;

e de seguida tenho que fazer uma funcao que inicializa a stack :

void initStack(STACK *s) {
s->sp = 0;
}

a minha d´vuida é a seguinte :

- o int size dentro da estrutura, ao inicializar uma stack , irá tomar o valor 1 ? porque quando sp == 0 , entao o vetor valores tem 1(size) indeces certo? neste caso a função tem que ficar assim :


void initStack(STACK *s) {
s->sp = 0;
s->size = 1;
}

OU

void initStack(STACK *s) {
s->sp = 0;
s->size = 1;
s->valores = malloc(sizeof(int) * stk->size);
}

qual das funções está correcta?

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

para que serve o parâmetro sp ?

ps : eu desconfio, o que é diferente de saber exactamente para que queres tu esse valor

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xintect

sp = stack pointer, aponta para o topo da stack. a bem dizer diz-nos em que elemento da stack nós estamos a funcionar, cada vez que adiciono um elemento da stack o sp aumenta e cada vez que tiro o sp diminui

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

tens de ser mais coerente na atribuição dos nomes das tuas variáveis:

- se tens nomes em português, então todos devem ser em português ...

- se tens nomes por extenso, então todos serão por extenso ...

agora no que toca a qual das funções está correcta : nenhuma

vamos ver a primeira:

- tens s->size = 1, mas na realidade a stack não tem tamanho nenhum porque não reservaste memória nenhuma.

vamos ver a segunda:

- tens malloc(sizeof(int) * stk->size), mas stk não está definido em lado nenhum.

para mim, a stack deveria ser assim:

typedef struct {
 int size;
 int increment;
 int pointer;
 int* array;
} IntStack;

int intStackInit(IntStack* stack) {
 if (!stack)
   return -1;

 stack->size = 0;
 stack->increment = 8;
 stack->pointer = 0;
 stack->array = NULL;

 return 0;
}

se pretenderes seguir este código, deixo para ti descobrir não só como fazer-lo como descobrir a razão de aparecer um novo parâmetro na estrutura ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.