Vous êtes sur la page 1sur 8

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

INTRODUCCIN A LAS ESTRUCTURAS DE DATOS


1. INTRODUCCIN
Las computadoras fueron diseadas o ideadas como una herramienta mediante la cual podemos realizar
operaciones de clculo complicadas en un lapso de mnimo tiempo. Pero, la mayora de las aplicaciones de
este fantstico invento del hombre, son las de almacenamiento y acceso de grandes cantidades de
informacin.
La informacin que se procesa en la computadora es un conjunto de datos, que pueden ser simples o
estructurados. Los datos simples son aquellos que ocupan slo una localidad de memoria, mientras que los
estructurados son un conjunto de casillas de memoria a las cuales hacemos referencia mediante un
identificador nico.
Debido a que por lo general tenemos que tratar con conjuntos de datos y no con datos simples (enteros,
reales, booleanos, etc.) que por s solos no nos dicen nada, ni nos sirven de mucho, es necesario tratar con
estructuras de datos adecuadas a cada necesidad.
2. CONCEPTO
Una estructura de datos es una coleccin de datos organizados de un modo particular, las estructuras de datos
pueden ser de dos tipos: estructuras de datos estticas y estructuras de datos dinmicas. Las estructuras de
datos estticas son aquellas en las que el espacio en memoria se define en tiempo de compilacin y no
pueden ser modificados durante la ejecucin del programa, corresponden a este tipo los arrays (vectores y
matrices). Las estructuras de datos dinmicas son aquellas en las que el espacio ocupado en memoria puede
ser modificada en tiempo de ejecucin, corresponden a este tipo: las listas, rboles y grafos.

3. TIPOS DE DATOS PRIMITIVOS (SIMPLES)


Son aquellos que ya estn definidos por los lenguajes de programacin, donde solo utilizan una localidad de
memoria, entre ellos se encuentran:
-

char
boolean
byte
short
int
long
float
doubl

4. ESTRUCTURAS DE DATOS
TAD (Tipo de Dato Abstracto)
Los TAD son definidos por el programador

TAD = datos + Operaciones (funciones)

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

5. LISTAS
La lista es un TAD, que consta de una secuencia de elementos llamados nodos.
Nodo
-

Datos (Informacin)
Enlace o apuntador (Apunta al siguiente nodo)
Info

Enlace

Nodos enlazados
Los nodos forman una secuencia desde el primer elemento al ltimo elemento. El primer nodo se enlaza al
segundo, ste se enlaza al tercero y as sucesivamente hasta llegar al ltimo nodo, que debe ser representado
de forma diferente para especificar que este nodo no se enlaza a ningn otro.

6. PILA
Una pila es TAD de tipo de lista LIFO (el ltimo en entrar es el primero en salir), tal como una pila de platos.
Operaciones sobre la pila:
-

Meter (push)
Sacar (pop)
Es vaca

7. COLA
Una cola es TAD de tipo de lista FIFO (el primero en entrar es el primero en salir), tal como la fila de un
banco.
Operaciones sobre la cola:
-

Insertar
Remover
Es vacia

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

LISTAS ENLAZADAS SIMPLES


1. INTRODUCCIN
Las listas enlazadas son una secuencia de nodos que se encuentran enlazados uno con el siguiente mediante
un enlace. Cada elemento (nodo) de una lista enlazada debe tener dos campos: un campo (info) que contiene
el valor de ese elemento y un campo (enlace) que indica la posicin del siguiente elemento.
Aunque se pueden crear muchos tipos de listas enlazadas, las tres variantes ms populares son la lista de
enlace simple, la lista doblemente enlazada y la lista enlazada circular.
2. LISTA DE ENLACE SIMPLE.

Una lista de enlace simple es una lista enlazada de nodos, donde cada nodo tiene un nico campo de enlace.
Una variable de referencia contiene una referencia al primer nodo, cada nodo (excepto el ltimo) enlaza con
el nodo siguiente, y el enlace del ltimo nodo contiene null para indicar el final de la lista.
En java para realizar listas enlazadas se utilizan clases autoreferenciadas.
Una clase autoreferenciada es una clase con al menos un campo cuyo tipo de referencia es el nombre de la
clase.
Las operaciones bsicas sobre una lista simple son:
-

Insertar nodo
Eliminar nodo
Buscar nodo
Mostrar lista
Eliminar lista

3. NODO
JAVA

Nodo
info

enlace

int info
Nodo enlace

class Nodo {
int info;
Nodo enlace;
}

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

4. LISTA ENLAZADA SIMPLE

cab
4

Lista
Nodo cab

NULL

JAVA
class Lista {

Nodo cab; //declaracin del nodo

insertarNodo
eliminarNodo
buscarNodo
mostrarLista
eliminarLista

void InsertarNodo(int n) //insercin por delante


{
if(cab==null) //entra la primera vez
{
cab=new Nodo(); //crea el nodo cab
cab.info=n;
cab.enlace=null; //su primer enlace apunta a null
}
else
{
Nodo temp=new Nodo(); //nodo temporal
temp.info=n;
temp.enlace=cab;
cab=temp;
}
}
void mostrarLista()
{
Nodo temp=cab;
while(temp!=null) //recorre hasta llegar a null
{
System.out.print(temp.info);
temp=temp.enlace;
}
}
}

Para probar la lista necesitamos una clase de prueba donde tenga la funcin main, como se muestra a
continuacin
class Prueba {
public static void main(String[] args) {
Lista A=new Lista();
A.InsertarNodo(2);
A.InsertarNodo(3);
A.InsertarNodo(4);
A.mostrarLista();
}
}
En el IDE Eclipse debera crear 3 clases como se muestra a continuacin

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

Ejercicios.
Insercin al ltimo
El mtodo de insercin del ejemplo es la insercin por delante (al principio), ahora realizaremos el mtodo de
insercin por detrs (al ltimo).
void insertarUltimo(int a)
{
if(cab==null)
{
cab=new Nodo();
cab.info=a;
cab.enlace=null;
}
else
{
Nodo aux=cab;
Nodo temp=new Nodo();
temp.info=a;
temp.enlace=null;
while(aux.enlace!=null)
{
aux=aux.enlace;
}
aux.enlace=temp;
}
}

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

MS EJERCICIOS CON LISTAS ENLAZADAS SIMPLES


Programa que permite insertar N datos en una lista enlazada (los datos son insertados ordenadamente
mediante una funcin insertarOrdenado())
class Nodo {
int info;
Nodo enlace;
public Nodo(int a){ //Constructor que recibe como parmetro un nmero
info=a;
}
}

public class Lista {


Nodo cab;
void mostrar()
{
Nodo aux=cab;
while(aux!=null){
System.out.print(aux.info+" ");
aux=aux.enlace;
}
}
void insertarOrdenado(int a){
if(cab==null){
cab=new Nodo(a);
cab.enlace=null;
}
else{
Nodo temp=new Nodo(a);
if(a<cab.info){
temp.enlace=cab;
cab=temp;
}
else{
Nodo aux=cab;
while(aux.enlace!=null && a>aux.enlace.info)
aux=aux.enlace;
temp.enlace=aux.enlace;
aux.enlace=temp;
}
}
}
}

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

import java.util.*;
public class Prueba {
public static void main(String[] args) {
Scanner en=new Scanner(System.in);
Lista l=new Lista();
System.out.print("inserte cantidad de datos: ");
int cant=en.nextInt();
int num;
for(int i=0;i<cant;i++)
{
System.out.print("inserte un dato: ");
num=en.nextInt();
l.insertarOrdenado(num);
}
l.mostrar();
}
}

Podemos modificar la clase Prueba para que los nmeros insertados en la lista sean generados aleatoriamente
Estos nmeros deben estar entre 10 y 20, la cantidad de nmeros ser introducido por teclado.
import java.util.*;
public class Prueba {
public static void main(String[] args) {
Scanner en=new Scanner(System.in);
Lista l=new Lista();
System.out.print("inserte cantidad de datos: ");
int cant=en.nextInt();
int num;
for(int i=0;i<cant;i++)
{

num=10+(int)(Math.random()*11); //numero aleatorio


l.insertarOrdenado(num);
}
l.mostrar();
}
}
Funcin que devuelve la suma de los datos de la lista
int sumarDatos()
int sumarDatos(){
int s=0;
Nodo temp=cab;
while(temp!=null){
s=s+temp.info;
temp=temp.enlace;
}
return s;
}

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE DATOS (Listas simples)

Funcin que muestre los datos primos de la lista (funcin para la clase Lista)
void mostrarPrimos()
boolean primo(int a){
int c=0;
for(int i=1;i<=a;i++)
if(a%i==0)
c++;
if(c<=2)
return true;
return false;
}
void mostrarPrimos(){
Nodo aux=cab;
while(aux!=null){
if(primo(aux.info))
System.out.print(aux.info+" ");
aux=aux.enlace;
}
}
Funcin que recibe como parmetro una lista (un nodo) a la cual se enlazar la lista.
void enlazar(Nodo A)
{
Nodo temp=cab;
while(temp.enlace!=null)
temp=temp.enlace;
temp.enlace=A;
}

Vous aimerez peut-être aussi