You are on page 1of 11

ESTRUCTURAS DE DATOS

En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema.

PILA EN PHP

Una pila es una lista de elementos en la que agregaremos y extraeremos los elementos por el mismo lado.

En PHP implementaremos las pilas usando vectores gracias a las funciones array_push() y array_pop() que nos permitirn la insercin y eliminacin de elementos.

EJEMPLO:

<? $dias = array ("lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "doning o"); $dia_error = array_pop($dias); array_push($dias,"domingo"); ?>

En este ejemplo lo que hacemos es arreglar un array que tiene el ltimo elemento equivocado, para eso, extraemos el ltimo elemento "doningo" y lo guardamos como $error_dia, luego agregamos el elemento correcto y la pila queda corregida.

Este ejemplo no sera un buen ejemplo de funcionalidad de las pilas pues se podra realizar lo mismo sin necesidad de pilas.

Otro ejemplo que no podremos realizar tan facilmente sin pilas. Imaginemos que tenemos un vector de das de la semana y queremos imprimirlos en orden opuesto, como la pila extrae por detrs, los elementos salen en orden opuesto, y como se va vaciando, solo necesitaremos hacer un while (count($dias) != 0) o lo que es lo mismo while(count($dias)).

<? $dias = array ("lunes", "martes", "miercoles", "jueves", "viernes", "sbado", "doming o"); while(count($dias))echo array_pop($dias)."<br />"; ?>

COLA EN PHP

Una cola (tambin llamada fila) es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operacin de insercin 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.

Las colas se utilizan en sistemas informticos, transportes y operaciones de investigacin (entre otros), dnde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.

Ejemplo en PHP: <?php class tadCola{ function tadCola () { } function encolar(&$cola,$elemento) { array_push($cola,$elemento); } function desencolar(&$cola,&$elemento) { $elemento = array_shift($cola); } function numElementos(&$cola) { return count($cola); } function listarCola(&$cola) { $elemento; if (!$this->vacia($cola)) { $this->desencolar($cola,$elemento); echo $elemento."|"; $this->listarCola($cola); $this->encolar($cola,$elemento); } else { //$this->invertirCola($cola); } } function invertirCola(&$cola) { $elemento; if (!$this->vacia($cola)) { $this->desencolar($cola,$elemento); $this->invertirCola($cola); $this->encolar($cola,$elemento); } } function vacia(&$cola) { if (count($cola)==0) return 1; else return 0; } } ?>

LISTA EN PHP

Una lista es una coleccin ordenada de valores. Una lista puede contener cualquier cosa.

EJEMPLO: <?php $edad=array(); session_register("edad"); session_register("indice"); if ($OK == "INSERTAR") { $indice=$indice+0; $edad[$indice]=$EDAD; echo "elemento ".$indice." insertado"; $indice++; }; if ($OK == "DESPLEGAR") { for($r=0; $r<=COUNT($edad)-1 ; $r=$r+1) { echo $edad[$r]."<br> " ; }; // otra manera de desplegar print_r($edad); session_unregister($edad); }; echo "<FORM ACTION=prog10.php METHOD=post>"; echo "EDAD:<INPUT TYPE=text NAME=EDAD value=$EDAD><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=INSERTAR ><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

QUE ES UN PUNTERO

Un puntero o apuntador es una variable que da referencia a una regin de memoria; en otras palabras es una variable cuyo valor es una direccin de memoria. Si se tiene una variable ' p ' de tipo puntero que contiene una direccin de memoria en la que se encuentra almacenado un valor ' v ' se dice que ' p ' apunta a ' v '. El programador utilizar punteros para guardar datos en memoria en muchas ocasiones, de la forma que se describe a continuacin.

EJEMPLO EN PHP <?php

$archivo = "datos.txt"; function detectar_fin_de_linea($contenido) { if (false !== strpos($contenido, "\r\n")) return "\r\n"; elseif (false !== strpos($contenido, "\r")) return "\r"; else return "\n"; } /* Esto es equivalente a file_get_contents($archivo) pero menos eficiente */ $puntero = fopen($archivo, "r"); $contenido = fread($puntero , filesize($archivo)); fclose($puntero); /* Esto es equivalente a file($archivo) pero se requiere buscar el tipo de fin de lnea. El sistema operativo Windows usa \r\n, Macintosh \r y Unix \n. file($archivo) detectar automaticamente el tipo de fin de lnea mientras que fread()/file_get_contents() no lo harn. */ $fin_de_linea = detectar_fin_de_linea($contenido); $contenido = file_get_contents($archivo); $lineas = explode($fin_de_linea, $contenido); /* Esto es equivalente a file_get_contents($archivo) */ $lineas= file($archivo);

$contenido = implode("\n", $lineas);

/* Esto es equivalente a fread($archivo, 64) si el archivo esta codificado en ASCII */ $contenido = file_get_contents($archivo); $cadena = substr($contenido, 0, 64); ?>

ARBOL BINARIO

En el rbol binario se combina lo mejor del array (acceso rpido a elementos, ej. Bsqueda binaria) y lo mejor de la lista dinmica (no hay que fijar de antemano el tamao mximo, no hay que abrir hueco para insertar un elemento y no hay que cerrar el hueco al borrar un elemento).

Si se tuvieran los elementos a insertar sera ideal y sencillo dado que se podran colocar en su posicin perfecta, pero no es as, no se tienen los datos desde el principio, as que se sigue el criterio de tener los menores a la izquierda y los mayores a la derecha, as que si el primer elemento es muy pequeo o muy grande puede ocurrir que tengamos una lista en vez de un rbol, esto se soluciona si se vuelca el contenido en un array y se vuelve a insertar.

EJEMPLO DE ARBOL BINARIO

<?php 002 003 004 005 006 007 008 009 public function __construct(){ $this->id_nodo = 0; class arbol{ public $id_nodo; public $data; public $hijo_izq; public $hijo_der;

010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 } }

$this->data = null; $this->hijo_izq = null; $this->hijo_der = null;

public function inserta($data){ if (is_null($this->data)){ $this->data = $data; } else { if ($data > $this->data){ if (is_null($this->hijo_der)) $this->hijo_der = new arbol(); $this->hijo_der->inserta($data); } else if($data < $this->data){ if (is_null($this->hijo_izq)) $this->hijo_izq = new arbol(); $this->hijo_izq->inserta($data); } }

protected function profundidad(){ $profundidadIzq = -1; $profundidadDer = -1; if (!is_null($this->hijo_der)){ $profundidadDer = $this->hijo_der->profundidad(); } if (!is_null($this->hijo_izq)){ $profundidadIzq = $this->hijo_izq->profundidad(); } return 1 + (($profundidadIzq > $profundidadDer)?$profundidadIzq:$profundidadDer); } protected function valance(){ $profundidadIzq = -1; $profundidadDer = -1;

048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 } } if (!is_null($this->hijo_der)){ $this->hijo_der->imprimir(); echo "\nID: ".$this->id_nodo."<br />"; echo "DATA: ".$this->data."<br />"; } public function imprimir(){ if (!is_null($this->hijo_izq)){ $this->hijo_izq->imprimir(); } } if (!is_null($this->hijo_izq)){ $this->hijo_izq->imprimirComoArbol($nivel+1); for($i=0;$i<$nivel;$i++) echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; echo $this->valance()."|".$this->data."<br />"; } if (!is_null($this->hijo_der)){ $this->hijo_der->imprimirComoArbol($nivel+1); public function imprimirComoArbol($nivel){ } return ($profundidadIzq - $profundidadDer); } } if (!is_null($this->hijo_izq)){ $profundidadIzq = $this->hijo_izq->profundidad(); if (!is_null($this->hijo_der)){ $profundidadDer = $this->hijo_der->profundidad();

088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

public function guardarBD($cnx){ $ejecutada = false; $qry = "INSERT INTO arbol VALUES (null, '{$this->data}', null, null);"; try{ $cnx->query($qry); if ($cnx->affected_rows > 0){ $this->id_nodo = $cnx->insert_id; $ejecutada = true; } } catch(Exception $ex){ echo "Error al insertar nodo"; } return $ejecutada; } public function cargarBD($cnx){ $ejecutada = false; $qry = "SELECT * FROM arbol WHERE id_nodo = {$this>id_nodo};"; try{ $resultadoBD = $cnx->query($qry); if ($resultado = $resultadoBD->fetch_object()){ $this->id_nodo = $resultado->id_nodo; $this->data = $resultado->data; //Hijo izquierdo if (!is_null($resultado->hijo_izq)){ $this->hijo_izq = new arbol(); $this->hijo_izq->id_nodo = $resultado>hijo_izq; $this->hijo_izq->cargarBD($cnx); } //Hijo derecho if (!is_null($resultado->hijo_der)){ $this->hijo_der = new arbol();

125 126 127 128 129 130 131 132 133 134 135 136 137 138

$this->hijo_der->id_nodo = $resultado>hijo_der; $this->hijo_der->cargarBD($cnx); } $ejecutada = true; } } catch(Exception $ex){ echo "Error al cargar arbol"; } return $ejecutada; } }

139 ?>

REPBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA DEFENSA UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA SABANETA ESTADO BARINAS

ESTRUCTURA DE DATOS EN PHP

PROFESOR: Cirilo Linares

BACHILLER: Carlos Marquez C.I: 12.896.208 Ing. De Sistema Seccin: B

Sabaneta, Enero 2013

You might also like