Estructuras de datos lineales - SergioRiosC/Datos-1 GitHub Wiki

Estructuras de datos lineales

Tipos de datos tienen operaciones ej: int soporta + - / * el tipo byte soporta &&, ||, >>, <<

  • Tipos primitivos: Datos que trae el lenguaje. int, String, float...
  • Tipos referencia: se extiende el lenguaje creando un tipo de dato, una descripcion de lo que tiene la memoria dentro
  • TDA: Tipos de Datos Abstractos-->tienen fundamento matematico
    • Tipos de TDA: listas enlazadas(linked list), soporta add, addFirst, addLast, remove, removeLast

  • Tipos de listas:
    Array:

    • Conexion finita y bien definida de elementos de x tipo
    • Cada elemento esta contiguo al otro en la memoria
    • int[] a=new int[8 /*capacidad del array*/]------> en la meoria va a haber 8 espacios seguidos del Array
    • tiene rapida lectura y escritura, pero lenta incercion en desorden y no puede crecer ni decrecer
    • se recorre :for(int i=i;i<a.lenght;i++){}
    • o: for(int i: a){}//for each

    Matrices:

    • es un array multidimencional
    • filas y columnas
    • se crea: int[][] m = new int [2][2]
    • se recorre: for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){}}

    Lista Enlazada:

    • estructura de datos dinamica
    • crece o decrece por demanda
    • no esta contiguua en la memoria
    • lista secuencial de elementos
    • cada elemento es un nodo
    • un nodo es un obj compuesto por dos elementos:
      el valor que guarda o dato
      referencia al siguiente elemento de la lista
      la lista tiene una referencia al primer elemento
      la referencia al primer elemento debe protegerse
      el ultimo nodo apunta a null
      codigo:

package list

class nodo{
private int dato;
private nodo next;
public nodo(int dato){
this.dato=dato;
this.next=null;
}
}
public class list{
private nodo first;
public list(){
this.first=null;
}
}

public void addLast(int e){
if(this.first==null){
this.first=new nodo(e);
}else{
nodo current=this.first
while(current.next!=null){
current=current.next;
}
current.next=new nodo(e)
}
}
main:
list l=new list();
l.addLast(1);
l.addLast(2);


Listas Simples

listas simples(una sola referencia) ...
agregar al inicio
public void addFirst(int element){
if(this.first==null){
this.first=new Nodo(element)
}else{
Node temp=new Node(element);
temp.next=this.first;
this.first=temp
}
}

Borrar al inicio
public void deletefirst(){
if(this.first==null){
return;
}else{
//this.first=this.first.next;
Node temp=this.first; //iguala a first
this.first=temp.next; //mueve a first
temp.next=null; //elimina la referencia del primer elemento
}
}

Eliminar al final

public void deletelast(){
if(this.fist!=null){
if(this.first.next==null){
this.first=null;
}else{
node temp=this.first
while(temp.next.next!=null){
temp=temp.next;
}
}temp.next=null; }
}

Listas Dobles

  • Se puede navegar hacia atras
  • cada nodo tiene 2 referencias: next y previous
    public void addFirst(int element){
    if(this.first==null){
    this.first=new Node(element);
    }else{
    node n =new nodo(element);
    n.next=this.first;
    this.first.previous=n;
    this.first=n
    }
    }
    Listas circulares
    Es una lista en la que cada nodo tiene un sucesor y un predecesor
    el sucesor del "ultimo" es el "primero"
    el predecesor del "primero" es el "ultimo"
    iniciando en cualquier nodo, se puede recorrer la lista completa
    el "first" apunta al "ultio" elemento
    son utiles cunado se necesita acceder rapidamente al inicio/final de la lista
    el recorrido se detiene cuando el current es igual al first

Pilas
conjunto de elementos colocados uno sobre otro
unicamente se puede acceder el ultimo elemento insertado
siempre se incerta al final(el final se llama tope)
naturaleza LIFO (last input, first output)
tiene 3 operaciones:
-push:insertar un elemento en el tope
-pop: eliminar un elemento en el tope
-peek: ver el tope
se puede implementar con listas o arrays

class Stack{
private int maxsize;
private Object[] stackArray;
private int topPosition=-1;
void push(Object new Object){
if(topPosition<maxSize){
stackArray[++topPosition]==new Object;
}
}
object pop(){
return StackArray[topPosition--];
}
}