Vous êtes sur la page 1sur 12

UNIVERSIDAD NACIONAL DE LA

AMAZONIA PERUANA
FACULTAD DE INGENIERIA DE SISTEMAS
E INFORMATICA

ALGORITMO Y ESTRUCTURA DE DATOS II


TRABAJO N02

TEMA

Pilas y Colas

DOCENTE

Ing. Elvis Del guila Lpez

ALUMNO

Alca Arequi Ciro

NIVEL

II

CICLO

IV

IQUITOS PERU
2014

PILAS Y COLAS

Las pilas y colas son estructuras de datos que se utilizan generalmente para
simplificar ciertas operaciones de programacin.

PILAS
Una pila (stack en ingls) es una lista ordenada o estructura de datos en la que
el modo de acceso a sus elementos es de tipo LIFO (del ingls Last In First
Out, ltimo en entrar, primero en salir) que permite almacenar y recuperar
datos. Esta estructura se aplica en multitud de ocasiones en el rea de
informtica debido a su simplicidad y ordenacin implcita de la propia
estructura.
Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar
(push), que coloca un objeto en la pila, y su operacin inversa, retirar (o
desapilar, pop), que retira el ltimo elemento apilado.
En cada momento slo se tiene acceso a la parte superior de la pila, es decir, al
ltimo objeto apilado (denominado TOS, Top of Stack en ingls). La operacin
retirar permite la obtencin de este elemento, que es retirado de la pila
-2 permitiendo el acceso al siguiente (apilado con anterioridad), que
4 a ser el nuevo TOS.
pasa
3
Por analoga con objetos cotidianos, una operacin apilar equivaldra a colocar
un plato sobre una pila de platos, y una operacin retirar a retirarlo.
Las pilas suelen emplearse en los siguientes contextos:

Evaluacin de expresiones en notacin postfija (notacin polaca


inversa).

Reconocedores sintcticos de lenguajes independientes del contexto

Implementacin de recursividad.

Por ejemplo:

3 + 4 * (8 2 * 5)
5
-2
8
4
3

-10
8
4
3

-5
-8
3

HISTORIA
El mtodo de pila para la evaluacin de expresiones fue propuesto en 1955 y
dos aos despus patentado por Friedrich L. Bauer, quin recibi en 1988 el
premio "IEEE Computer Society Pioneer Award" por su trabajo en el desarrollo
de dicha estructura de datos.
PILA COMO TIPO ABSTRACTO DE DATOS
A modo de resumen tipo de datos, la pila es un contenedor de nodos y tiene
dos operaciones bsicas: push (o apilar) y pop (o desapilar). 'Push' aade un
nodo a la parte superior de la pila, dejando por debajo el resto de los nodos.
'Pop' elimina y devuelve el actual nodo superior de la pila. Una metfora que se
utiliza con frecuencia es la idea de una pila de platos en una cafetera con
muelle de pila. En esa serie, slo la primera placa es visible y accesible para el
usuario, todas las dems placas permanecen ocultas. Como se aaden las
nuevas placas, cada nueva placa se convierte en la parte superior de la pila,
escondidos debajo de cada plato, empujando a la pila de placas. A medida que
la placa superior se elimina de la pila, la segunda placa se convierte en la parte
superior de la pila. Dos principios importantes son ilustrados por esta metfora:
En primer lugar la ltima salida es un principio, la segunda es que el contenido
de la pila est oculto. Slo la placa de la parte superior es visible, por lo que
para ver lo que hay en la tercera placa, el primer y segundo platos tendrn que
ser retirados.
Operaciones
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que
en las implementaciones modernas de las pilas se suelen aadir ms de uso
habitual.

Crear: se crea la pila vaca. (constructor)

Tamao: regresa el nmero de elementos de la pila. (size)

Apilar: se aade un elemento a la pila.(push)

Desapilar: se elimina el elemento frontal de la pila.(pop)

Cima: devuelve el elemento que esta en la cima de la pila. (top o peek)

Vaca: devuelve cierto si la pila est sin elementos o falso en caso de


que contenga uno. (empty).

Implementacin
Un requisito tpico de almacenamiento de una pila de n elementos es O(n). El
requisito tpico de tiempo de O(1) las operaciones tambin son fciles de
satisfacer con un array o con listas enlazadas simples.
Estructuras de datos relacionadas
El tipo base de la estructura FIFO (el primero en entrar es el primero en salir)es
la cola, y la combinacin de las operaciones de la pila y la cola es
proporcionado por el deque. Por ejemplo, el cambio de una pila en una cola en
un algoritmo de bsqueda puede cambiar el algoritmo de bsqueda en primera
profundidad (en ingls, DFS) por una bsqueda en amplitud (en ingls, BFS).
Una pila acotada es una pila limitada a un tamao mximo impuesto en su
especificacin.
PROGRAMA DE PILAS EN C#
Primera Programacin
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace Pilas
{
public partial class Form1 : Form
{
Stack memoria = new Stack();
int puntero = 0;
public Form1()
{
InitializeComponent();
}
private void BtnAgregar_Click(object sender, EventArgs e)
{
if (puntero < 5)
{
memoria.Push(System.Convert.ToInt16(textBox1.Text));
textBox1.Clear();
listBox1.Items.Insert(0, memoria.Peek());
puntero++;
if (puntero == 5)
label2.Text = "Se ingre dato. Pila llena";
else
label2.Text = "Se ingres dato";
}

else
{
label2.Text = "Pila desbordada";
}
}
private void BtnEliminar_Click(object sender, EventArgs e)
{
if (puntero > 0)
{
puntero--;
listBox1.Items.Insert(0, memoria.Pop());
if (puntero == 0)
label2.Text = "se elmin dato. Pila vaca";
else
label2.Text = "Se elimin dato";
}
else
{
label2.Text = "Pila vaca";
}
}
private void BtnSalir_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

Segunda Programacin
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random numero = new Random();
int n = numero.Next(1, 99);
}

ListaPilas.Items.Add(n.ToString());

private void button2_Click(object sender, EventArgs e)


{
ListaPilas.Items.RemoveAt(0);

}
}

COLAS
Las colas tambin son llamadas FIFO (First In First Out), que quiere decir el
primero que entra es el primero que sale.
USOS CONCRETOS DE LA COLA
La particularidad de una estructura de datos de cola es el hecho de que slo
podemos acceder al primer y al ltimo elemento de la estructura. As mismo,
los elementos slo se pueden eliminar por el principio y slo se pueden aadir
por el final de la cola.
Ejemplos de colas en la vida real
seran: personas comprando en
un supermercado, esperando
para entrar a ver un partido de
bisbol, esperando en el cine
para ver una pelcula, una
pequea peluquera, etc. La idea
esencial es que son todos lneas
de espera.
INFORMACIN ADICIONAL
En caso de estar vaca, borrar un
elemento sera imposible hasta
que no se aade un nuevo
elemento. A la hora de aadir un
elemento podramos darle una
mayor importancia a unos
elementos que a otros (un cargo
VIP) y para ello se crea un tipo
de cola especial que es la cola de prioridad.
OPERACIONES BSICAS

Crear: se crea la cola vaca.

Encolar: (aadir, entrar, insertar): se aade un elemento a la cola. Se


aade al final de esta.

Desencolar: (sacar, salir, eliminar): se elimina el elemento frontal de la


cola, es decir, el primer elemento que entr.

Frente: (consultar, front): se devuelve el elemento frontal de la cola, es


decir, el primer elemento que entr.

IMPLEMENTACIONES
Colas en C#
public partial class frmPrincipal
{
// Variables globales
public static string[] Cola;
public static int Frente;
public static int Final;
public static int N;
[STAThread]
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmPrincipal());
}
public frmPrincipal()
{

// Constructor

InitializeComponent();

Cola = new string[5];


N = 4;
Frente = -1;
Final = -1;

// Arreglo lineal de 5

void CmdInsercionClick(object sender, System.EventArgs e)


{
frmInsercion Insercion = new frmInsercion();
Insercion.Show();
}
void CmdRecorridoClick(object sender, System.EventArgs e)
{
frmRecorrido Recorrido = new frmRecorrido();
Recorrido.Show();
}
void CmdBusquedaClick(object sender, EventArgs e)
{
frmBusqueda Busqueda = new frmBusqueda();
Busqueda.Show();
}
void CmdEliminacionClick(object sender, EventArgs e)
{
frmEliminacion Eliminar = new frmEliminacion();
Eliminar.Show();
}
}

Algoritmo Insertar(Cola, N, Frente, Final, Elemento)


void CmdInsertarClick(object sender, System.EventArgs e)
{
elemento = txtInsercion.Text;
// Se verifica que haya espacio en la Cola
if (frmPrincipal.Frente == 0 &&
frmPrincipal.Final == frmPrincipal.N)
{
MessageBox.Show("La Cola esta llena");
return;
}
if (frmPrincipal.Frente == frmPrincipal.Final
+ 1)
{
MessageBox.Show("La Cola esta llena");
return;
}
// Si la cola esta vacia se inicializan
punteros
if (frmPrincipal.Frente == -1)
{
frmPrincipal.Frente = 0;
frmPrincipal.Final = 0;
}
else if (frmPrincipal.Final == frmPrincipal.N)
{
frmPrincipal.Final = 0;
}
else
{
frmPrincipal.Final = frmPrincipal.Final +
1;
}
// Se agrega elemento a la Cola
frmPrincipal.Cola[frmPrincipal.Final] =
elemento;
txtInsercion.Text = "";
}

Algoritmo Eliminacin (Cola, Frente, Final, N)


void CmdEliminarClick(object sender, EventArgs e)
{
if (frmPrincipal.Frente == -1)
{
MessageBox.Show("Cola Vacia");
return;
}
string elemento =
frmPrincipal.Cola[frmPrincipal.Frente];
// si la cola tiene un solo elemento
if (frmPrincipal.Frente == frmPrincipal.Final)
{
frmPrincipal.Frente = -1;
frmPrincipal.Final = -1;
}
else if (frmPrincipal.Frente ==
frmPrincipal.N)
{
frmPrincipal.Frente = 0;
}
else
{
frmPrincipal.Frente = frmPrincipal.Frente
+ 1;
}
lsEliminado.Items.Add(elemento);
}
TIPOS DE COLAS

Colas circulares (anillos): en las que el ltimo elemento y el primero


estn unidos.

Colas de prioridad: En ellas, los elementos se atienden en el orden


indicado por una prioridad asociada a cada uno. Si varios elementos
tienen la misma prioridad, se atendern de modo convencional segn la
posicin que ocupen. Hay 2 formas de implementacin:

1. Aadir un campo a cada nodo con su prioridad. Resulta conveniente


mantener la cola ordenada por orden de prioridad.

2. Crear tantas colas como prioridades haya, y almacenar cada elemento


en su cola.

Bicolas: son colas en donde los nodos se pueden aadir y quitar por
ambos extremos; se les llama DEQUE (Double Ended QUEue). Para
representar las bicolas lo podemos hacer con un array circular con Inicio
y Fin que apunten a cada uno de los extremos. Hay variantes:

Bicolas de entrada restringida: Son aquellas donde la insercin slo se


hace por el final, aunque podemos eliminar al inicio al final.

Bicolas de salida restringida: Son aquellas donde slo se elimina por el


final, aunque se puede insertar al inicio y al final.

PROGRAMA DE COLAS EN C#
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;

namespace Colas
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnInsertar_Click(object sender, EventArgs e)
{
Random numero = new Random();
int n = numero.Next(1, 200);
}

}
}

ListaColas.Items.Add(n.ToString());

private void btnEliminar_Click(object sender, EventArgs e)


{
ListaColas.Items.RemoveAt(0);
}

PROGRAMA DE PILAS & COLAS EN C#


using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;

namespace Pilas_y_Colas
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnInsertar_Click(object sender, EventArgs e)
{
ListaPilas.Items.Clear();
Random numero = new Random();
int n = numero.Next(1, 200);
ListaColas.Items.Add(n.ToString());
int i;

for (i = ListaColas.Items.Count - 1; i >= 0; i--)


{
ListaPilas.Items.Add(ListaColas.Items[i].ToString());
}

private void btnEliminar_Click(object sender, EventArgs e)


{
ListaColas.Items.RemoveAt(0);
ListaPilas.Items.RemoveAt(0);
}
}

Vous aimerez peut-être aussi