馃敟 PILAS (STACKS)

驴Qu茅 son las pilas (stacks)?

Una pila (stack) es un lugar en la cual se almacenan y retraen valores. La forma en la que los valores entran y salen es mediante el concepto Last In First Out (El 煤ltimo en llegar es el primero en salir). Los datos son agregados a la pila utilizando la operaci贸n push y los datos son extra铆dos de la pila mediante la operaci贸n pop.

驴C贸mo se agregan valores a una pila?

Para agregar valores a una pila utilizamos la instrucci贸n push y especificamos el valor a apilar.

push("Hugo")

[Hugo]
push("Paco")

["Paco"]
["Hugo"]
push("Luis")

["Luis"]
["Paco"]
["Hugo"]

驴C贸mo extraer valores de una pila?

Para extraer valores de una pila utilizamos la instrucci贸n pop, este retorna el valor de la parte superior al tiempo que lo remueve de la pila.

pop() => "Luis"

["Paco"]
["Hugo"]

驴C贸mo se relacionan los m茅todos y la pila del sistema?

Cuando un m茅todo es invocado, la ejecuci贸n en proceso es detenida y el control pasa al m茅todo invocado. Cuando este 煤ltimo se completa se retorna al punto donde la ejecuci贸n del primer m茅todo fue detenida.

Para mantener una referencia al lugar en donde se pausa la primera ejecuci贸n y regresar posteriormente ah铆, el segundo m茅todo invocado y los posteriores se van almacenando en una pila. Conforme esta pila se va desahogando se van completando cada uno de los procesos.

package main

import "fmt"

func metodo1() {
	fmt.Println("inicia metodo 1")
	metodo2()
	fmt.Println("termina metodo 1")
}

func metodo2() {
	fmt.Println("inicia metodo 2")
	metodo3()
	fmt.Println("termina metodo 2")
}

func metodo3() {
	fmt.Println("inicia metodo 3")
	fmt.Println("termina metodo 3")
}

func main() {
	metodo1()
}

Salida.

inicia metodo 1
inicia metodo 2
inicia metodo 3
termina metodo 3
termina metodo 2
termina metodo 1

驴C贸mo operan los m茅todos dentro de una pila del sistema?

  • Cuando el programa inicia se ejecuta antes que nada el m茅todo main() que es el punto de entrada a los programas en Go.
  • El primer m茅todo en invocarse es metodo1()
  • El metodo1() llama a al metodo2() y le cede el control.
  • El metodo2() llama al metodo3() y le cede el control.
  • Cuando el metodo3() termina regresa el control al metodo2()
  • Cuando el metodo2() termina le cede el control a metodo1()
  • Cuando el metodo1() termina le cede el control al main()
  • El programa se completa

Es importante tener en cuenta que los m茅todos son implementados dentro de una pila. Cuando un m茅todo es llamado la direcci贸n de la siguiente instrucci贸n es puesta dentro de una pila. Cuando este m茅todo finaliza la direcci贸n de ejecuci贸n es extraida de la pila.