En estos dias he estado tabajando con estructuras de datos en AS y ya que me funcionan algunas (mi objetivo principal es trabajar con colecciones) quiero incluir el código aquí para quien pueda servir
En este post incluyo el código de implementación de una pila LIFO.
Una pila o cola o stak tipo LIFO (Last In, First Out) es una lista lineal que almacena una serie sucesiva, continua, de celdas en la que se tiene acceso a un extremo de la lista y por tanto la consulta, las inserciones y las eliminaciones se llevan a cabo sólo por ese extremo.
Esta estructura de datos es aplicable a ciertos sistemas de consulta, algunos sistemas de manejo de inventario, entre otros.
el código para la implementación es:
Código :
class Lifo { private var _tope:Number = 0; private var _base:Number = 0; private var _minimo:Number = 0; private var _maximo:Number = 0; private var _estado:String = new String("Vacia"); private var _contenedor:Array; private var _longitudNodo:Number = 1; public function Lifo(tam:Number) { _contenedor = new Array(tam); setMinimo(0); setMaximo(tam); setBase(minimo); _tope = minimo - longitudNodo; setEstado("vacia"); } private function setMinimo(newValue:Number) { _minimo = newValue; } private function setMaximo(newValue:Number) { _maximo = newValue - longitudNodo; } private function setBase(newValue:Number) { _base = newValue; } private function setEstado(newValue:String) { _estado = newValue; } private function incrementeTope() { _tope++; } private function decrementeTope() { _tope--; } function set longitudNodo(newValue:Number) { _longitudNodo = newValue; } function get longitudNodo():Number { return _longitudNodo; } function get minimo():Number { return _minimo; } function get maximo():Number { return _maximo; } function get base():Number { return _base; } function get tope():Number { return _tope; } function get estado():String { return _estado; } public function insertar(Dato) { if(estado == "llena") { throw new Error("Error 3. La pila está llena, no se puede agregar más datos");//trace("Error 3. La pila está llena, no se puede agregar más datos"); } else { incrementeTope(); _contenedor[tope] = Dato; trace("dato " + tope + "(" + Dato + ") agregado"); if(tope >= maximo) { setEstado("llena"); } else { if(estado == "vacia") { setEstado("normal"); } } } } public function eliminar() { if(estado == "vacia") { throw new Error("Error 2. La pila está vacia, no se puede eliminar datos");//trace("Error 2. La pila está vacia, no se puede eliminar datos"); } else { _contenedor.splice(tope,1); decrementeTope(); if(tope < base) { setEstado("vacia"); } else { if(estado == "llena") { setEstado("normal"); } } } } public function consultar() { if(estado == "vacia") { throw new Error("Error 1. La pila está vacia");//trace("Error 1. La pila está vacia"); } else { var retorno = _contenedor[tope]; return retorno; } } }Ésta es una de las tantas formas de implementación, este código debe guardarse en un archivo de nombre Lifo.as, sin embargo para sus implementaciones pueden llevar a cabo los cambios que juzguen pertinentes, en post posteriores explicaré el código.
ya se está viendo como largo el post Claro está si les interesa la explicación del código zzz: