Documentos de Académico
Documentos de Profesional
Documentos de Cultura
push se realiza por un extremo y la operacin de extraccin pop por el otro. Tambin se le llama estructura FIFO (del ingls First In First Out), debido a que el primer elemento en entrar ser tambin el primero en salir. El tipo cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobs est compuesta de elementos (personas), que dispone de dos extremos comienzo y fin. Por el comienzo se extraer un elemento cuando haya comprado el billete para su viaje, y si llega una nueva persona con intencin de usar el autobs, tendr que colocarse al final y esperar que todos los elementos situados antes que l abandonen la cola. CODIGO PRINCIPAL 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]; // Arreglo lineal de 5 N = 4; Frente = -1; Final = -1; } 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)
1. [La Cola esta llena?] Si Frente = 0 y Final = N Escribir: Desbordamiento y Volver Si Frente = Final + 1 Escribir: Desbordamiento y Volver 2. [Encontrar el nuevo valor de Final] Si Frente = -1 , entonces: [La cola esta vaca] Hacer Frente = 0 y Final = 0 Si no, Si Final = N, entonces: Hacer Final = 0 Si no Hacer Final = Final + 1 [Fin del condicional] 3. Hacer Cola[Final] = Elemento
CODIGO 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"); // Desbordamiento (Overflow) return; } if (frmPrincipal.Frente == frmPrincipal.Final + 1) { MessageBox.Show("La Cola esta llena"); // Desbordamiento (Overflow) 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 = ""; } corrida
Escribir: Cola Vaca (Underflow) 2. Si no, si Frente = Final, entonces: Escribir: Cola[Frente] 3. Si no, si Final < Frente Hacer i = Frente Repetir Mientras i <= N Escribir: Cola[i] Hacer i = i + 1 Hacer j = 0 Repetir Mientras j <= Final Escribir: Cola[j] Hacer j = j + 1 4. Si no Hacer i = Frente Repetir Mientras i <= Final Escribir: Cola[i] Hacer i = i + 1 CODIGO void CmdRecorridoClick(object sender, System.EventArgs e) { if (frmPrincipal.Frente == -1 && frmPrincipal.Final == -1) { MessageBox.Show("Cola Vacia"); return; } else if (frmPrincipal.Frente == frmPrincipal.Final) { lsElemCola.Items.Add(frmPrincipal.Cola[frmPrincipal.Frente]); } else if (frmPrincipal.Final < frmPrincipal.Frente) { int i = frmPrincipal.Frente; do { lsElemCola.Items.Add(frmPrincipal.Cola[i]); i = i + 1; } while (i <= frmPrincipal.N); int j = 0; do { lsElemCola.Items.Add(frmPrincipal.Cola[j]); j = j + 1; } while (j <= frmPrincipal.Final); } else {
1. [Cola Vaca?] Si Frente = -1 y Final = -1, entonces Escribir: Cola Vaca (Underflow) 2. Si no, si Frente = Final, entonces: Si Elemento = Cola[Frente] Escribir: Cola[Frente] y Volver 3. Si no, si Final < Frente Hacer i = Frente Repetir Mientras i <= N Si Elemento = Cola[i] Escribir: Cola[i] y Volver Si no Hacer i = i + 1 Hacer j = 0 Repetir Mientras j <= Final Si Elemento = Cola[j] Escribir: Cola[j] y Volver Si no Hacer j = j + 1 4. Si no
Hacer i = Frente Repetir Mientras i <= Final Si Elemento = Cola[i] Escribir: Cola[i] y Volver Si no Hacer i = i + 1 5. Escribir: No se encuentra elemento en cola
CODIGO void CmdBuscarClick(object sender, EventArgs e) { string elemento = txtBuscar.Text; txtBuscar.Text = ""; txtBuscar.Focus(); if (frmPrincipal.Frente == -1) { MessageBox.Show("Cola Vaca"); return; } if (frmPrincipal.Frente == frmPrincipal.Final) { int res = string.Compare(elemento,frmPrincipal.Cola[frmPrincipal.Frente]); if (res == 0) { lsBusqueda.Items.Add(frmPrincipal.Cola[frmPrincipal.Frente]); return; } } else if (frmPrincipal.Final < frmPrincipal.Frente) { int i = frmPrincipal.Frente; do { int res = string.Compare(elemento,frmPrincipal.Cola[i]); if (res == 0) { lsBusqueda.Items.Add(frmPrincipal.Cola[i]); return; } else i = i + 1; } while (i <= frmPrincipal.N); int j = 0; do { int res = string.Compare(elemento,frmPrincipal.Cola[j]); if (res == 0) { lsBusqueda.Items.Add(frmPrincipal.Cola[j]); return; } else j = j + 1; } while (j <= frmPrincipal.Final); } else
{ int i = frmPrincipal.Frente; do { int res = string.Compare(elemento,frmPrincipal.Cola[i]); if (res == 0) { lsBusqueda.Items.Add(frmPrincipal.Cola[i]); return; } else i = i + 1; } while (i <= frmPrincipal.Final); } MessageBox.Show("No se encuentra elemento en cola"); }
1. [Cola Vaca?] Si Frente = -1 entonces Escribir: "Cola Vaca" (Underflow) y Volver 2. Hacer Elemento = Cola[Frente] 3. [Encontrar el nuevo valor de Frente] Si Frente = Final, entonces [La cola solo tena un elemento] Hacer Frente = -1 y Final = -1 Si no, si Frente = N, entonces Hacer Frente = 0 Si no Hacer Frente = Frente + 1 [Fin de la condicin] 4. Escribir: Elemento eliminado (Elemento) 5. Volver
Cdigo 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); }