public static NodoPilaCola APilarEncolar(NodoPilaCola pilacola)
        {
            //CASO 1: Pila no ha sido instanciada, o, pila nula
            if (pilacola == null)
            {
                Console.WriteLine("La estructura de datos no ha sido creada... escoja opción 1");
                return(pilacola);
            }


            Console.WriteLine("Ingrese elemento a guardar");
            int          valor     = int.Parse(Console.ReadLine());
            NodoPilaCola nodoNuevo = new NodoPilaCola(valor);

            NodoPilaCola aux = pilacola;

            for (; aux.siguiente != null; aux = aux.siguiente)
            {
                ;
            }
            aux.siguiente = nodoNuevo;
            pilacola.cima = nodoNuevo;

            return(pilacola);
        }
 public static void Imprimir(NodoPilaCola miPila)
 {
     if (miPila == null)
     {
         Console.WriteLine("La estructura de datos no ha sido creada... escoja opción 1");
     }
     for (NodoPilaCola aux = miPila; aux != null; aux = aux.siguiente)
     {
         Console.WriteLine("Dato:" + aux.dato + "\n");
     }
 }
        public static NodoPilaCola Crear(NodoPilaCola pilacola)

        {
            Console.WriteLine("Ingrese elemento a guardar");
            int valor = int.Parse(Console.ReadLine());

            pilacola        = new NodoPilaCola(valor);
            pilacola.frente = pilacola.cima = pilacola;


            return(pilacola);
        }
 public static void estaVacia(NodoPilaCola miPila)
 {
     //CASO 1: Pila no ha sido instanciada, o, pila nula
     if (miPila == null)
     {
         Console.WriteLine("La estructura de datos esta vacia");
     }
     else
     {
         Console.WriteLine("La estructura de datos no esta vacia");
     }
 }
 public static void ImprimirCima(NodoPilaCola miPila)
 {
     //CASO 1: Pila no ha sido instanciada, o, pila nula
     if (miPila == null)
     {
         Console.WriteLine("La estructura de datos no ha sido creada... escoja opción 1");
     }
     else
     {
         Console.WriteLine("Cima: " + miPila.cima.dato + "\n");
     }
 }
        static void Main(string[] args)
        {
            int op = 0;

            NodoPilaCola mipilacola = null;

            Console.WriteLine("Escoja cualquiera de las opciones a ejecutar:\n"
                              + "1) Pila  \n"
                              + "2) Cola \n");
            int op0 = int.Parse(Console.ReadLine());



            do
            {
                Console.WriteLine("Ingrese opción \n"
                                  + "1) Crear  \n"
                                  + "2) Apilar - Encolar \n" +
                                  "3) Desapilar - Desencolar\n" +
                                  "4) Cima\n" +
                                  "5) Preguntar si la estructura de datos esta vacia \n" +
                                  "6) Imprimir Toda La estructura de datos \n" +
                                  "7) Salir \n");
                op = int.Parse(Console.ReadLine());

                switch (op)
                {
                case 1:
                    mipilacola = NodoPilaCola.Crear(mipilacola);
                    break;

                case 2:
                    mipilacola = NodoPilaCola.APilarEncolar(mipilacola);
                    break;

                case 3:
                    mipilacola = NodoPilaCola.DesapilarDesencolar(mipilacola, op0);
                    break;

                case 4:
                    NodoPilaCola.ImprimirCima(mipilacola);
                    break;

                case 5:
                    NodoPilaCola.estaVacia(mipilacola);
                    break;

                case 6:
                    NodoPilaCola.Imprimir(mipilacola);
                    break;
                }
            } while (op != 7);
        }
        public static NodoPilaCola DesapilarDesencolar(NodoPilaCola pilacola, int op0)
        {
            //CASO 1: Pila no ha sido instanciada, o, pila nula
            if (pilacola == null)
            {
                Console.WriteLine("La estructura de datos no ha sido creada... escoja opción 1");
                return(pilacola);
            }
            //Caso 2: que solo exista nodo
            if (pilacola.siguiente == null)
            {
                Console.WriteLine("Elemento: " + pilacola.dato);
                return(pilacola.siguiente);//return null;
            }

            if (op0 == 2)
            {
                //CASO 1: Pila no ha sido instanciada, o, pila nula
                if (pilacola == null)
                {
                    Console.WriteLine("La estructura de datos no ha sido creada... escoja opción 1");
                    return(pilacola);
                }

                Console.WriteLine("Elemento: " + pilacola.dato);
                pilacola = pilacola.siguiente;

                return(pilacola);//return null;
            }
            else
            {
                //Caso 3 donde hay 2 o más nodos
                NodoPilaCola aux = pilacola;
                for (; aux.siguiente.siguiente != null; aux = aux.siguiente)
                {
                    ;
                }
                Console.WriteLine("Elemento: " + aux.siguiente.dato);
                aux.siguiente = aux.siguiente.siguiente;
                pilacola.cima = aux;
                return(pilacola);
            }
        }
 public NodoPilaCola(int dato)
 {
     this.dato      = dato;
     this.siguiente = null;
 }