Вы находитесь на странице: 1из 9

Lista Enlazada

Diego Nicolás Román Araneda

Estructura de datos

Instituto IACC

6 de mayo de 2018
Desarrollo

1. Teniendo la siguiente lista de 15 números enteros:

(95,6,88,32,598,63,796,45,1,158,31,86,59,701)

Realice un ejemplo en php que almacene dichos números, para lo cual considere lo

siguiente: si el número es impar, debe ser insertado al inicio y si es par, insértelo en el

intermedio de la lista.

 Utilice como guía el recurso adicional.

2. Luego de insertar los 15 elementos:

a) Elimine 3 elementos: uno al inicio, uno al final y uno en la posición de

su preferencia, y luego realice un ciclo que imprima los elementos

restantes de la lista.

b) Inserte 10 elementos más. ¿Cuál es el límite de inserción de su lista?

Explique brevemente.

Para esta instrucción, cree un ciclo for con la iteración de 10 veces “i”

para ingresar 10 valores en la lista, por lo que el límite, en este caso, es

de 10. Claramente el límite siempre será definido por la forma en la que

se ingresen los datos, por ejemplo, se puede indicar que se ingresen 100

valores o lo que ciertas condiciones se establezcan antes, para lo cual, el

límite siempre será variable.

c) Ejecute un ciclo para vaciar la lista eliminando uno a uno los elementos

(sin utilizar la función vaciar del recurso adicional).


<?php
class Nodo
{
//variable que contiene el elemento a almacenar dentro del nodo
public $dato;
//variable que contiene el puntero con la posicion del siguiente nodo
public $proximo;

//funcion void para crear el nodo


public function __construct($elemento)
{
$this->dato = $elemento;
$this->proximo = null;
}
}
//Clase Lista Enlazada
class ListaEnlazada
{
//variable o puntero que apunta al primer nodo de la lista
public $primero = null;
//variable que almacena la cantidad de elementos dentro de la lista
private static $count = 0;

//funcion que cuenta los nodos dentro de la lista


public function ContarNodos()
{
return self::$count;
}

//funcion que inserta un nodo dentro de una lista vacia


public function InsertarPrimerovacia($elemento) {
$this->primero = new Nodo($elemento);
$this->proximo = null;
self::$count++;
}

//funcion que inserta un nodo en la primera posicion de una lista


public function InsertarPrimero($elemento) {
if ($this->primero == null) {
$this->primero = new Nodo($elemento);
} else {
$aux = new Nodo($elemento);

$aux->proximo = $this->primero;

$this->primero = $aux;
}
self::$count++;
}

//funcion que inserta un nodo en la ultima posicion de la lista


public function InsertarUltimo($elemento) {
if ($this->primero == null) {
$this->primero = new Nodo($elemento);
} else {
$actual = $this->primero;
while ($actual->proximo != null)
{
$actual = $actual->proximo;
}
$actual->proximo = new Nodo($elemento);
}
self::$count++;
}

//funcion que inserta un nodo despues de una posicion dada


public function InsertarDespues($elemento,$key){
if($key == 0){
$this->InsertarPrimero($elemento);
}
else{
$aux = new Nodo($elemento);
$actual = $this->primero;
$anterior = $this->primero;
for($i=0;$i<$key;$i++)
{
$anterior = $actual;
$actual = $actual->proximo;
}
$anterior->proximo = $aux;
$aux->proximo = $actual;
self::$count++;
}
}

//funcion que elimina el primer nodo de la lista


public function EliminarPrimero() {
if ($this->primero != null) {
$actual = $this->primero;
$this->primero = $actual->proximo;
}
self::$count--;
}
//funcion que elimina el nodo que ocupa la posicion que sigue a la posicion pasada por
parametro
public function EliminarDespues($key){
if($key == 0){
$this->EliminarPrimero($elemento);
}
else{
$actual = $this->primero;
$anterior = $this->primero;
for($i=0;$i<$key;$i++)
{
$anterior = $actual;
$actual = $actual->proximo;
}
$anterior->proximo = $actual->proximo;
self::$count--;
}
}

//funcion que elimina el nodo cuyo dato coincide con el valor del parametro
public function EliminarNodo($key)
{
$actual = $anterior = $this->primero;
while($actual->dato != $key) {
$anterior = $actual;
$actual = $actual->proximo;
}
if ($actual == $anterior) {
$this->primero = $actual->proximo;
}
$anterior->proximo = $actual->proximo;
self::$count--;
}

//funcion que busca un dato dentro de la lista e imprime su posicion


public function BuscarDato($elemento)
{
$encontro = false;
$contador = $this->ContarNodos();
$actual = $anterior = $this->primero;
for($i=0;$i<$contador;$i++)
{
if ($actual->dato == $elemento) {
$encontro = true;
$posi = $i;
break;
}
else {
$anterior = $actual;
$actual = $actual->proximo;
}
}
if ($encontro != false){
echo "El elemento se encuentra dentro de la lista en la posicion: ".$posi;
} else {
echo "El elemento no se encuentra dentro de la lista.";
}
}

//funcion que recorre la lista desde el primer nodo hasta e ultimo e imprime el dato dentro del
nodo
public function ImprimirLista()
{
$elementos = [];
$actual = $this->primero;
while($actual != null) {
array_push($elementos, $actual->dato);
$actual = $actual->proximo;
}
$str = '';
foreach($elementos as $elemento)
{
$str .= $elemento . '->';
}
echo $str;
}
}

//Creamos la nueva
$lista = new ListaEnlazada();
//Inserción de datos de acuerdo al control N°5
$lista->InsertarPrimero(95);
$lista->InsertarUltimo(6);
$lista->InsertarUltimo(88);
$lista->InsertarUltimo(32);
$lista->InsertarUltimo(598);
$lista->InsertarUltimo(63);
$lista->InsertarUltimo(796);
$lista->InsertarUltimo(45);
$lista->InsertarUltimo(1);
$lista->InsertarUltimo(158);
$lista->InsertarUltimo(31);
$lista->InsertarUltimo(86);
$lista->InsertarUltimo(59);
$lista->InsertarUltimo(701);
$lista->ImprimirLista();
echo "\n";
echo 'Total de elementos dentro de la lista: '.$lista->ContarNodos();
echo "\n";
echo "\n";

//Instrucción 2.a Eliminar 3 elementos, uno al inicio, uno al final y uno en la posición de su
preferencia, y luego realice un ciclo que imprima los elementos restantes de la lista
// Eliminar el primer elemento
$lista->EliminarPrimero();
$lista->ImprimirLista();
echo "\n";
echo "Se ha eliminado el primer elemento de la lista","\n";
echo 'Total de elementos dentro de la lista: '.$lista->ContarNodos();
echo "\n";
echo "\n";

// Eliminar el último elemento


$lista->EliminarNodo(701);
$lista->ImprimirLista();
echo "\n";
echo "Se ha eliminado el último elemento de la lista","\n";
echo 'Total de elementos dentro de la lista: '.$lista->ContarNodos();
echo "\n";
echo "\n";

// Eliminar un elemento cualquiera


$lista->EliminarDespues(5);
$lista->ImprimirLista();
echo "\n";
echo "Se ha eliminado un elemento del centro de la lista","\n";
echo 'Total de elementos dentro de la lista: '.$lista->ContarNodos();
echo "\n";
echo "\n";

// Instrucción 2.b - Insertar 10 elementos


$cantidad = 10;
for($i=0;$i<$cantidad;$i++){
$lista->InsertarUltimo($i);
}
$lista->ImprimirLista();
echo "\n";
echo "Se han insertado $cantidad de elementos en la lista","\n";
echo 'Total de elementos dentro de la lista: '.$lista->ContarNodos();
echo "\n";
echo "\n";

// Instrucción 2.c - Vaciar la lista


$largo = $lista->ContarNodos();
for($i=0;$i<$largo;$i++){
$lista->EliminarPrimero();
}
$lista->ImprimirLista();
echo "\n";
echo "Se han eliminado todos los elementos en la lista","\n";
echo 'Total de elementos dentro de la lista: '.$lista->ContarNodos();
echo "\n";
echo "\n";

?>
Éxito #stdin #stdout 0.03s 23368KB
95->6->88->32->598->63->796->45->1->158->31->86->59->701->
Total de elementos dentro de la lista: 14

6->88->32->598->63->796->45->1->158->31->86->59->701->
Se ha eliminado el primer elemento de la lista
Total de elementos dentro de la lista: 13

6->88->32->598->63->796->45->1->158->31->86->59->
Se ha eliminado el último elemento de la lista
Total de elementos dentro de la lista: 12

6->88->32->598->63->45->1->158->31->86->59->
Se ha eliminado un elemento del centro de la lista
Total de elementos dentro de la lista: 11

6->88->32->598->63->45->1->158->31->86->59->0->1->2->3->4->5->6->7->8->9->
Se han insertado 10 de elementos en la lista
Total de elementos dentro de la lista: 21

Se han eliminado todos los elementos en la lista


Total de elementos dentro de la lista: 0
Bibliografía

 Contenido semana 5 – Estructuras de datos

 Recursos adicionales semana 5 – Operaciones con listas enlazadas

Вам также может понравиться