Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
¿Por qué la función pop no se ejecuta con stack[*top--] pero funciona con stack[*(top--)]?

El problema es que no puedo usar la función pop.

 int pop(int stack[],int *top,int item) { if(*top==-1) { printf("Stack Underflow"); return 0; } return stack[(*top)--]; }

Aquí, si uso stack[*top--] parece que no funciona! ¿Cuál es la diferencia? ¿Por qué la variable superior en la función principal no se reduce?

 int main() { int stack[4], top = -1, item, id, ch; for(;;) { printf("Enter your choice:\n1.push\n2.pop\n3.Print top element\n4.Print all elements\n5.Exit\n"); scanf("%d",&ch); switch(ch) { case 1: printf("Enter the item to be pushed:\n"); scanf("%d",&item); push(stack,&top,item); break; case 2: id=pop(stack,&top,item); printf("%d was popped\n",id); break; case 4: print(stack,&top,item); break; case 5: exit(0); } } }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Lo que (*top)-- hace es:

  1. Desreferencia top , es decir, accede al valor al que apunta top .
  2. Disminuye ese valor.

Lo que hace *top-- es:

  1. Decrementa top , es decir, el valor de top mismo
  2. Desreferencia ese valor.

Además de eso, creo que sería mejor si define una estructura de pila en lugar de usar una matriz sin procesar y un número entero como puntero.

 #define STACK_CAPACITY 3 // Adjust it as you want struct stack { int items[STACK_CAPACITY]; int top; }; void stack_init(struct stack *s) { s->top = -1; } int stack_push(struct stack *s, int item) { if (s->top == STACK_CAPACITY-1) return 0; // fail: stack is full s->items[++s->top] = item; return 1; // success: item pushed } int stack_pop(struct stack *s, int *top) { if (s->top == -1) return 0; if (top != NULL) // if top is NULL, ignore it *top = s->items[s->top]; s->top--; return 1; }

Así es como puedes usarlo:

 int main() { struct stack s; stack_init(&s); if (!stack_push(&s, 1)) printf("Stack is full\n"); if (!stack_push(&s, 2)) printf("Stack is full\n"); if (!stack_push(&s, 3)) printf("Stack is full\n"); if (!stack_push(&s, 4)) printf("Stack is full\n"); if (!stack_push(&s, 5)) printf("Stack is full\n"); int item; stack_pop(&s, &item); printf("top = %d\n", item); // outputs 3 stack_pop(&s, NULL); // Ignore the top stack_pop(&s, &item); printf("top = %d\n", item); // outputs 1 if (!stack_pop(&s, NULL)) { printf("Stack is empty: cannot pop\n"); } }

Además, no use scanf() para leer la entrada del usuario. fgets() es mucho más seguro.

over 4 years ago · Santiago Trujillo Relatório

0

En C, todos los operadores de posfijos tienen mayor precedencia que todos los operadores de prefijos (o infijos). Así es como se define el lenguaje. Asi que

 *top--

es equivalente a

 *(top--)

y si tu quieres

 (*top)--

necesitas el paréntesis explícito.

over 4 years ago · Santiago Trujillo Relatório

0

return stack[(*top)--];
here if I use [*top--]

(*top)-- obtiene el objeto al que apunta la top y lo decrementa. Debido a que *top apunta a la parte top de la persona que llama, ese es el valor que desea usar para buscar un elemento de matriz. Luego -- disminuye el top de la persona que llama, haciendo que apunte al siguiente elemento más reciente en la pila.

*top-- es *(top--) , que decrementa top y obtiene el objeto al que apunta el valor no decrementado. Eso también obtiene la top de la persona que llama, pero disminuye la parte top local de la función, no el objeto de la persona que llama. Debido a que la top de la función se reduce, ya no apunta a la top de la persona que llama.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda