SlideShare una empresa de Scribd logo
1 de 18
3.51.-Diseñe y especifique formalmente el TAD Bicola. Piense en la posibilidad de tener una
ventana sobre el extremo en el que se van a realizar las operaciones.
TAD Bicola[TipoBC]
X1 X2 X3 ….. Xn
{ invariante: TRUE }
Constructoras:
inicBiCola()
Modificadoras:
insertFirst()
insertLast()
removeFirst()
removeLast()
Analizadoras:
infoBiColaFrente()
infoBiColaFinal()
vaciaBiCola()
----------------------------------------------------------------------
inicBiCola()
/* Crea una Bicola vacía */
{ post: inicBiCola = Ø }
----------------------------------------------------------------------
void adicBiColaFrente(T elem )
/* Agrega el elemento elem al frente de la cola */
{ post: bicola = elem,x1,x2,…,xn }
----------------------------------------------------------------------
void adicBiColaFinal(T elem )
/* Agrega el elemento elem al final de la cola */
{ post: bicola = x1,x2,…,xn, elem }
----------------------------------------------------------------------
void elimBiColaFrente()
/* Elimina el elemento que está al frente de la bicola */
{ pre: n > 0 }
{ post: bicola = x2,…,xn }
----------------------------------------------------------------------
void elimBiColaFinal()
/* Elimina el elemento que está al final de la bicola */
{ pre: n > 0 }
{ post: bicol = x1,x2,…,xn-1 }
----------------------------------------------------------------------
T infoBiColaFrente()
/* Retorna el elemento que está al frente de la bicola */
{ pre: n > 0 }
{ post: infoBiColaFrente = x1 }
----------------------------------------------------------------------
T infoBiColaFinal()
/* Retorna el elemento que está al final de la bicola */
{ pre: n > 0 }
{ post: infoBiColaFinal = xn }
----------------------------------------------------------------------
bool vaciaBiCola()
/* Informa si la bicola está vacía */
{ post: vaciaBiCola = ( bicol = ) }
----------------------------------------------------------------------
void destruirBiCola()
/* Destruye la bicola retornando toda la memoria ocupada */
{ post: la bicola ha sido destruida }
3.52
3.53
//Nodo.java
public class Nodo {
private Object o;
private Nodo next;
private Nodo back;
public Nodo (){
o=null;
next=null;
back=null;
}
public Nodo(Object o, Nodo next,Nodo back){
this.o=o;
this.next=next;
this.back=back;
}
public void setValor(Object z){
o=z;
}
public Object getValor(){
return o;
}
public Nodo getNext(){
return next;
}
public void setNext(Nodo next){
this.next=next;
}
public Nodo getBack(){
return back;
}
public void setBack(Nodo back){
this.back= back;
}
}
// Bicola.java
public class Bicola {
Nodo head, tail;
int size;
public void inicBicola()
{
head = new Nodo();
tail = new Nodo();
head.setNext(tail);
tail.setBack(head);
size=0;
}
public void insertFirst(Object obj) {
Nodo h = head;
Nodo node = new Nodo();
node.setValor(obj);
node.setNext(h);
h.setBack(node);
head = node;
if (size == 0)
tail = node;
size++;
}
public void insertLast(Object obj) {
Nodo t = tail;
Nodo node = new Nodo();
node.setValor(obj);
node.setBack(t);
t.setNext(node);
tail = node;
if (size == 0)
head = node;
size++;
}
public Object removeFirst() {
if (head == null)
return null;
Object val = head.getValor();
head = head.getNext();
size--;
return val;
}
public Object removeLast() {
if (tail == null)
return null;
Object val = tail.getValor();
tail = tail.getBack();
size--;
return val;
}
public int size() {
return size;
}
public Object infoBicolaFirst()
{
return head.getValor();
}
public Object infoBicolaLast()
{
return tail.getValor();
}
public boolean vaciaBicola()
{
return size==0?true:false;
}
public String toString() {
String s = "head [";
Nodo aux = head;
for (int i = 0; i < size; i++) {
s += aux.getValor();
if (aux == tail) {
break;
}
s += "-";
aux = aux.getNext();
}
return s + "] tail";
}
}
//Demo Bicola
public class DemoBicolas {
public static void main(String[]args)
{
Bicola bicola1=new Bicola();
bicola1.inicBicola();
bicola1.insertFirst(45);
bicola1.insertLast(4);
bicola1.insertFirst(11);
bicola1.insertFirst(22);
bicola1.insertFirst(33);
bicola1.insertFirst(5);
bicola1.insertFirst(1);
System.out.println(bicola1.toString());
System.out.println(bicola1.size());
bicola1.removeFirst();
System.out.println(bicola1.toString());
bicola1.removeLast();
System.out.println(bicola1.toString());
}
}
3.54
3.55
import java.io.*;
import java.util.*;
/**
* Clase para introducir datos de un fichero de texto con enteros a una tabla de
frecuencias.
*/
public class Estadisticas
{
public static void main(String[] args) {
Tabla t = new Tabla();
t.aniadir(1);
// System.out.print(t.getInfoEnt(1));
t.aniadir(2);
t.aniadir(3);
t.aniadir(4);
t.aniadir(1);
t.aniadir(2);
System.out.print(t.getInfoEnt(1));
}
}
/**
* Clase para representar frecuencias de enteros.
*
* @author
* @version
*/
class Frecuencia
{
private int numero;
private int frecuencia;
/**
* Construye una frecuencia
*/
public Frecuencia(int numero, int frecuencia)
{
this.numero = numero;
this.frecuencia = frecuencia;
}
/**
* Método observador del entero
*/
public int getNumero()
{
return numero;
}
/**
* Método observador de la frecuencia;
*/
public int getFrecuencia()
{
return frecuencia;
}
/**
* Suma uno a la frecuencia
*/
public void sumar1()
{
frecuencia++;
}
}
public class Tabla
{
private static final int MAX_NUM_DATOS = 1000;
private Frecuencia[] tabla;
private int total;
/**
* Construye una tabla de frecuencias vacía.
*/
public Tabla()
{
tabla = new Frecuencia[MAX_NUM_DATOS];
inicializar();
}
/**
* Vacía la tabla de frecuencias.
*/
public void inicializar()
{
total = 0;
}
/**
* Incrementa en uno la frecuencia de un entero de la tabla.
* La implementación limita a MAX_NUM_DATOS el número de datos distintos.
* Si no cabe en la tabla, devuelve error=cierto
* @param n entero a mofificar la frecuencia en uno.
* @return cierto si no cabe en la tabla. Falso, en caso contrario.
*/
public boolean aniadir(int n)
{
//encontrar n en tabla
int pos = buscar(n);
System.out.println(pos);
return true;}
/* boolean error = false;
//si está n en tabla, recolocar
if (pos != -1) {
tabla[pos].sumar1();
while (pos > 0 && tabla[pos].getNumero() > tabla[pos-1].getNumero())
{
Frecuencia aux = tabla[pos];
tabla[pos] = tabla[pos-1];
tabla[pos-1] = aux;
pos--;
}
} else { //si no esá, introducir al final si se puede
if (getTotal() < tabla.length) {
total++;
tabla[getTotal()] = new Frecuencia(n, 1);
} else {
error = true;
}
}
return error;
}*/
/**
* Retorna el número de enteros distintos de la tabla.
* @return enteros distintos de la tabla.
*/
public int getTotal()
{
return total;
}
/**
* Retorna la frecuencia i-ésima ordenada de mayor a menor
* @param i posición i-ésima
* @return frecuencia i-ésima ordenada de mayor a menor. Si no exite la
posición i-ésima
* se retorna la frecuencia (0,0)
*/
public Frecuencia info(int i)
{
if (0 <= i && i < getTotal()) {
return new Frecuencia(getInfoEnt(i), getInfoFrec(i));
} else {
return new Frecuencia(0, 0);
}
}
/**
* Retorna el entero i-ésimo ordenado de mayor a menor de la tabla de
frecuencias.
* @param i posición i-ésima de la tabla
* @return entero en la posición i-ésima. Si no existe la posición i-ésima,
retorna 0
*/
public int getInfoEnt(int i)
{
if (i <= 0 && i < getTotal()) {
return tabla[i].getNumero();
} else {
return 0;
}
}
/**
* Retorna el valor de la frecuencia i-ésima ordenada de mayor a menor de la
tabla.
* @param i posición i-ésima
* @return entero con la frecuencia de la posición i-ésima. Si no existe la
posición,
* se retorna 0
*/
public int getInfoFrec(int i)
{
if (i <= 0 && i < getTotal()) {
return tabla[i].getFrecuencia();
} else {
return 0;
}
}
/**
* Retorna la posición dentro de la tabla de un número dado.
* @param n número a buscar
* @return posición dentro de la tabla donde está n. Si no se encuentra,
retorna -1;
*/
private int buscar(int n)
{
int i;
for (i = 0; i < getTotal() && getInfoEnt(i) != n; i++);
if (i == getTotal() || getInfoEnt(i) != n) {
i = -1;
}
return i;
}
}
3.56
public class BolsaLista
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Primer elemento que tiene la estructuraBolsa
*/
private Elemento primerElemento;
/**
* Límite inferior de la estructuraBolsa
*/
private int inferior;
/**
* Límite superior de la estructuraBolsa
*/
private int superior;
/**
* Cantidad de elementos que tiene la estructuraBolsa
*/
private int cantidadElementos;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Método constructor por parámetros
* @param inf Limite inferior
* @param sup Limite superior
*/
public BolsaLista( int inf, int sup )
{
primerElemento = null;
cantidadElementos = 0;
inferior = inf;
superior = sup;
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Agrega un elemento a la estructuraBolsa
* <b>pre:</b> inferior < elem < superior <br>
* <b>post:</b> elem es agregado a la lista encadenada
* @param elem Elemento que se va a agregar a la estructuraBolsa
*/
public void agregar( int elem ) throws FueraLimiteException
{
if( elem > inferior && elem < superior )
{
Elemento nodo = new Elemento( elem );
if( primerElemento == null )
primerElemento = nodo;
else if( nodo.obtenerValor( ) < primerElemento.obtenerValor( ) )
{
// Debe quedar como primer elemento de la lista
primerElemento.insertarAntes( nodo );
primerElemento = nodo;
}
else
{
Elemento p = primerElemento;
for( ; p.obtenerSiguiente( ) != null && p.obtenerSiguiente(
).obtenerValor( ) < nodo.obtenerValor( ); p = p.obtenerSiguiente( ) )
;
p.insertarDespues( nodo );
}
cantidadElementos++;
}
else
throw new FueraLimiteException( "Elemento fuera de rango" );
}
/**
* Elimina un elemento de la estructuraBolsa
* <b>pre:</b> Existe un elemento en la lista encadenada tal que su valor es
igual a elem <br>
* <b>post:</b> elem es eliminado de la lista encadenada
* @param elem Elemento que va a ser eliminado
* @throws NoExisteException Se lanza la excepción si no se encuentra el
elemento
*/
public void eliminar( int elem ) throws NoExisteException
{
Elemento elemento = new Elemento( elem );
if( primerElemento == null )
throw new NoExisteException( "Elemento no existe" );
else if( elemento.obtenerValor( ) == primerElemento.obtenerValor( ) )
{
// Se debe eliminar el primer elemento de la lista
primerElemento = primerElemento.desconectarPrimero( );
cantidadElementos--;
}
else
{
for( Elemento p = primerElemento.obtenerSiguiente( ); p != null; p =
p.obtenerSiguiente( ) )
if( p.obtenerValor( ) == elemento.obtenerValor( ) )
{
p.desconectarNodo( );
cantidadElementos--;
return;
}
throw new NoExisteException( "Elemento no existe" );
}
}
/**
* Informa si existe un elemento dado dentro de la estructuraBolsa
* <b>post:</b> Retorna true si elem es encontrado
* @param elem Elemento que va a ser buscado
* @return true si encontró el elemento, false de lo contrario
*/
public boolean buscar( int elem )
{
Elemento elemento = new Elemento( elem );
for( Elemento p = primerElemento; p != null; p = p.obtenerSiguiente( ) )
if( p.obtenerValor( ) == elemento.obtenerValor( ) )
return true;
return false;
}
/**
* Retorna el elemento que se encuentra en la posición pos de la
estructuraBolsa, suponiendo que los elementos están situados ordenados de manera
ascendentemente
* <b>pre:</b> 1 <= pos <= cantidadElementos <br>
* <b>post:</b> Se retorna el valor del elemento en la posición pos <br>
* @param pos Posición del elemento que se quiere buscar
* @return Elemento que se encuentra en la posición pedida
* @throws NoExisteException Se lanza la excepción si no se encuentra la
posición pedida
*/
public int retornar( int pos ) throws NoExisteException
{
if( pos > cantidadElementos )
throw new NoExisteException( "La posición que desea se encuentra
fuera del rango" );
else
{
Elemento temp = primerElemento;
for( int i = 1; i < pos; i++ )
temp = temp.obtenerSiguiente( );
return temp.obtenerValor( );
}
}
/**
* Retorna el número de elementos de la estructuraBolsa
* <b>post:</b> Retorna cantidadElementos <br>
* @return Longitud de la estructuraBolsa
*/
public int darLongitud( )
{
return cantidadElementos;
}
/**
* Retorna el límite inferior de la estructuraBolsa
* <b>post:</b> Retorna inferior <br>
* @return Límite inferior de la estructuraBolsa
*/
public int darInferior( )
{
return inferior;
}
/**
* Retorna el límite superior de la estructuraBolsa
* <b>post:</b> Retorna superior <br>
* @return Límite superior de la estructuraBolsa
*/
public int darSuperior( )
{
return superior;
}
/**
* Retorna un iterador sobre los elementos de la estructuraBolsa
* @return Un iterador sobre los elementos de la estructuraBolsa
*/
/* public IIteradorBolsa darIterador( )
{
IteradorBolsa1 iterador = new IteradorBolsa1( primerElemento );
return iterador;
}
*/
}
/*/*/*/*/*/
/**
* Clase que representa un elemento de una estructuraBolsa
*/
public class Elemento
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* El elemento que se tiene después del actual
*/
private Elemento siguiente;
/**
* El elemento que se tiene antes del actual
*/
private Elemento anterior;
/**
* Valor del elemento
*/
private int valor;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Constructor por parámetros
* @param pValor Valor
*/
public Elemento( int pValor )
{
valor = pValor;
siguiente = null;
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Retorna el valor que tiene el elemento
* @return Valor
*/
public int obtenerValor( )
{
return valor;
}
/**
* Inserta el nodo antes del actual.
* @param nodo Nodo a insertar
*/
public void insertarAntes( Elemento nodo )
{
nodo.siguiente = this;
nodo.anterior = anterior;
if( anterior != null )
anterior.siguiente = nodo;
anterior = nodo;
}
/**
* Inserta el nodo después del actual.
* @param nodo Nodo a insertar
*/
public void insertarDespues( Elemento nodo )
{
nodo.siguiente = siguiente;
nodo.anterior = this;
if( siguiente != null )
siguiente.anterior = nodo;
siguiente = nodo;
}
/**
* Desconecta el nodo de la lista suponiendo que es el primero. <br>
* @return Nodo con el cual comienza la lista ahora
*/
public Elemento desconectarPrimero( )
{
Elemento p = siguiente;
siguiente = null;
if( p != null )
{
p.anterior = null;
}
return p;
}
/**
* Desconecta el nodo de la lista suponiendo que no es el primero.
*/
public void desconectarNodo( )
{
Elemento ant = anterior;
Elemento sig = siguiente;
anterior = null;
siguiente = null;
ant.siguiente = sig;
if( sig != null )
sig.anterior = ant;
}
/**
* Retorna el siguiente elemento al actual
* @return Elemento, pude ser null
*/
public Elemento obtenerSiguiente( )
{
return siguiente;
}
/**
* Representación en String del elemento
*/
public String toString( )
{
return "" + valor;
}
}
public class FueraLimiteException extends Exception{
FueraLimiteException(String m)
{
super(m);
}
}
/**
* Clase que representa a un iterador que va a utilizar un apuntador a un primer
elemento
*/
public class IteradorBolsa1
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Elemento al que apunta el iterador
*/
private Elemento elemento;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Constructor del iterador
* @param primerElemento Primer elemento del iterador
*/
public IteradorBolsa1( Elemento primerElemento )
{
elemento = primerElemento;
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/*
* (non-Javadoc)
*
* @see uniandes.cupi2.bolsa.mundo.IIteradorBolsa#darSiguiente()
*/
public int darSiguiente( )
{
if( elemento != null )
{
int valor = elemento.obtenerValor( );
elemento = elemento.obtenerSiguiente( );
return valor;
}
else
return Integer.MAX_VALUE;
}
/*
* (non-Javadoc)
*
* @see uniandes.cupi2.bolsa.mundo.IIteradorBolsa#haySiguiente()
*/
public boolean haySiguiente( )
{
return elemento == null ? false : true;
}
}
public class NoExisteException extends Exception{
NoExisteException(String m)
{
super(m);
}
}

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

EncuestPregunta 11
EncuestPregunta 11EncuestPregunta 11
EncuestPregunta 11
 
Pst solides3d
Pst solides3dPst solides3d
Pst solides3d
 
Pstricks y tikz
Pstricks y tikzPstricks y tikz
Pstricks y tikz
 
Tema 4
Tema 4Tema 4
Tema 4
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcional
 
Jorge informe tecnico
Jorge informe tecnicoJorge informe tecnico
Jorge informe tecnico
 
Sudoku
SudokuSudoku
Sudoku
 
Funciones Básicas - EMdH
Funciones Básicas - EMdHFunciones Básicas - EMdH
Funciones Básicas - EMdH
 
Ejercicios java
Ejercicios javaEjercicios java
Ejercicios java
 
Comp logic-ifelse
Comp logic-ifelseComp logic-ifelse
Comp logic-ifelse
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenador
 
Practica 1 informática ii
Practica 1 informática iiPractica 1 informática ii
Practica 1 informática ii
 
Codigo ejercicios
Codigo ejerciciosCodigo ejercicios
Codigo ejercicios
 
Ejercicios de programacion concurrente
Ejercicios de programacion concurrenteEjercicios de programacion concurrente
Ejercicios de programacion concurrente
 
Repartido 1 2016 6° e
Repartido 1 2016 6° eRepartido 1 2016 6° e
Repartido 1 2016 6° e
 
Practica 2
Practica 2Practica 2
Practica 2
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Practica 11 de rm corregida y final
Practica 11 de rm  corregida y finalPractica 11 de rm  corregida y final
Practica 11 de rm corregida y final
 
1.2. kotlin (1)
1.2. kotlin (1)1.2. kotlin (1)
1.2. kotlin (1)
 
Groovy no es java sin punto y coma v3
Groovy no es java sin punto y coma v3Groovy no es java sin punto y coma v3
Groovy no es java sin punto y coma v3
 

Destacado

Gupea 2077 10510 1
Gupea 2077 10510 1Gupea 2077 10510 1
Gupea 2077 10510 1guest2e4c89
 
La vivienda solución o problema
La vivienda solución o  problema La vivienda solución o  problema
La vivienda solución o problema lauragdepaoli
 
Presentatie food seminar 24 juni 2015 (claudia bruins)
Presentatie food seminar 24 juni 2015 (claudia bruins)Presentatie food seminar 24 juni 2015 (claudia bruins)
Presentatie food seminar 24 juni 2015 (claudia bruins)Axon Lawyers
 
Is it experience and
Is it experience andIs it experience and
Is it experience andSaajan Patel
 
Lengua adicional al español ii (ingles)
Lengua adicional al español ii (ingles)Lengua adicional al español ii (ingles)
Lengua adicional al español ii (ingles)kevin1807
 
Revista Opinião.Seg - Edição 3 - Março de 2010
Revista Opinião.Seg - Edição 3 - Março de 2010Revista Opinião.Seg - Edição 3 - Março de 2010
Revista Opinião.Seg - Edição 3 - Março de 2010Editora Roncarati
 
Cnv cursusprogramma 2012
Cnv cursusprogramma 2012Cnv cursusprogramma 2012
Cnv cursusprogramma 2012CNV Vakcentrale
 
INTRODUCCIÓN DE INFORMÁTICA
INTRODUCCIÓN DE INFORMÁTICA INTRODUCCIÓN DE INFORMÁTICA
INTRODUCCIÓN DE INFORMÁTICA Gaby Garcia
 
Luis garcía berlanga
Luis garcía berlangaLuis garcía berlanga
Luis garcía berlangan1noa
 
N 07 Power Struggle
N 07 Power StruggleN 07 Power Struggle
N 07 Power Strugglechucho1943
 
Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]
Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]
Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]Bruno Borges
 
Trabajo administracion funciones
Trabajo administracion funcionesTrabajo administracion funciones
Trabajo administracion funcionesMorelia Fuentes
 
Informatica
InformaticaInformatica
InformaticaDAYSIPAZ
 

Destacado (20)

Info tube
Info tubeInfo tube
Info tube
 
Gupea 2077 10510 1
Gupea 2077 10510 1Gupea 2077 10510 1
Gupea 2077 10510 1
 
La vivienda solución o problema
La vivienda solución o  problema La vivienda solución o  problema
La vivienda solución o problema
 
Resolución de problemas músculo
Resolución de problemas músculoResolución de problemas músculo
Resolución de problemas músculo
 
Presentatie food seminar 24 juni 2015 (claudia bruins)
Presentatie food seminar 24 juni 2015 (claudia bruins)Presentatie food seminar 24 juni 2015 (claudia bruins)
Presentatie food seminar 24 juni 2015 (claudia bruins)
 
Cheramie_thesis
Cheramie_thesisCheramie_thesis
Cheramie_thesis
 
Is it experience and
Is it experience andIs it experience and
Is it experience and
 
Ciudades inteligentes
Ciudades inteligentesCiudades inteligentes
Ciudades inteligentes
 
Viver a vida
Viver a vidaViver a vida
Viver a vida
 
Lengua adicional al español ii (ingles)
Lengua adicional al español ii (ingles)Lengua adicional al español ii (ingles)
Lengua adicional al español ii (ingles)
 
Revista Opinião.Seg - Edição 3 - Março de 2010
Revista Opinião.Seg - Edição 3 - Março de 2010Revista Opinião.Seg - Edição 3 - Março de 2010
Revista Opinião.Seg - Edição 3 - Março de 2010
 
A045060107
A045060107A045060107
A045060107
 
Cnv cursusprogramma 2012
Cnv cursusprogramma 2012Cnv cursusprogramma 2012
Cnv cursusprogramma 2012
 
INTRODUCCIÓN DE INFORMÁTICA
INTRODUCCIÓN DE INFORMÁTICA INTRODUCCIÓN DE INFORMÁTICA
INTRODUCCIÓN DE INFORMÁTICA
 
Luis garcía berlanga
Luis garcía berlangaLuis garcía berlanga
Luis garcía berlanga
 
N 07 Power Struggle
N 07 Power StruggleN 07 Power Struggle
N 07 Power Struggle
 
Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]
Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]
Conquistando o seu_lugar_no_mercado_de_trabalho[1][1]
 
Software
SoftwareSoftware
Software
 
Trabajo administracion funciones
Trabajo administracion funcionesTrabajo administracion funciones
Trabajo administracion funciones
 
Informatica
InformaticaInformatica
Informatica
 

Similar a Parte 15

ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)Videoconferencias UTPL
 
ListasEnlazadas-Collections-Generics-Interfaces.docx
ListasEnlazadas-Collections-Generics-Interfaces.docxListasEnlazadas-Collections-Generics-Interfaces.docx
ListasEnlazadas-Collections-Generics-Interfaces.docxJACKMARLONVALQUITRUJ1
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pilajefer
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2jefer
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2jefer
 
Código Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docxCódigo Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docxKevinPeaChavez
 
Código Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docxCódigo Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docxKevinPeaChavez
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Partecarpio
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en javaTeresa Freire
 
Informe tecnico u 5-victor uex
Informe tecnico u 5-victor uexInforme tecnico u 5-victor uex
Informe tecnico u 5-victor uexvictoruex
 
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc X
 
La torre de hanoi segundo lab
La torre de hanoi segundo labLa torre de hanoi segundo lab
La torre de hanoi segundo labIsus Villa
 
Unidad iii Pilas y colas
Unidad iii Pilas y colasUnidad iii Pilas y colas
Unidad iii Pilas y colasCecilia Loeza
 

Similar a Parte 15 (20)

ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
ESTRUCTURAS Y ALGORITMOS II (I Bimestre Abril Agosto 2011)
 
7
77
7
 
ListasEnlazadas-Collections-Generics-Interfaces.docx
ListasEnlazadas-Collections-Generics-Interfaces.docxListasEnlazadas-Collections-Generics-Interfaces.docx
ListasEnlazadas-Collections-Generics-Interfaces.docx
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
 
Funcionamiento de un pila2
Funcionamiento de un pila2Funcionamiento de un pila2
Funcionamiento de un pila2
 
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
 
Código Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docxCódigo Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docx
 
Código Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docxCódigo Arbol Binario de Búsqueda.docx
Código Arbol Binario de Búsqueda.docx
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Parte
 
Unidad iii pilas y colas
Unidad iii pilas y colasUnidad iii pilas y colas
Unidad iii pilas y colas
 
Busqueda
BusquedaBusqueda
Busqueda
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en java
 
Listas Pilas Colas
Listas Pilas ColasListas Pilas Colas
Listas Pilas Colas
 
1.2. kotlin
1.2. kotlin1.2. kotlin
1.2. kotlin
 
Informe tecnico u 5-victor uex
Informe tecnico u 5-victor uexInforme tecnico u 5-victor uex
Informe tecnico u 5-victor uex
 
2- TDA Listas
2- TDA Listas2- TDA Listas
2- TDA Listas
 
Jyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilasJyoc java-cap20 listas, colas y pilas
Jyoc java-cap20 listas, colas y pilas
 
La torre de hanoi segundo lab
La torre de hanoi segundo labLa torre de hanoi segundo lab
La torre de hanoi segundo lab
 
Unidad iii Pilas y colas
Unidad iii Pilas y colasUnidad iii Pilas y colas
Unidad iii Pilas y colas
 

Parte 15

  • 1. 3.51.-Diseñe y especifique formalmente el TAD Bicola. Piense en la posibilidad de tener una ventana sobre el extremo en el que se van a realizar las operaciones. TAD Bicola[TipoBC] X1 X2 X3 ….. Xn { invariante: TRUE } Constructoras: inicBiCola() Modificadoras: insertFirst() insertLast() removeFirst() removeLast() Analizadoras: infoBiColaFrente() infoBiColaFinal() vaciaBiCola() ---------------------------------------------------------------------- inicBiCola() /* Crea una Bicola vacía */ { post: inicBiCola = Ø } ---------------------------------------------------------------------- void adicBiColaFrente(T elem ) /* Agrega el elemento elem al frente de la cola */ { post: bicola = elem,x1,x2,…,xn } ---------------------------------------------------------------------- void adicBiColaFinal(T elem ) /* Agrega el elemento elem al final de la cola */ { post: bicola = x1,x2,…,xn, elem } ---------------------------------------------------------------------- void elimBiColaFrente() /* Elimina el elemento que está al frente de la bicola */ { pre: n > 0 } { post: bicola = x2,…,xn } ---------------------------------------------------------------------- void elimBiColaFinal() /* Elimina el elemento que está al final de la bicola */ { pre: n > 0 } { post: bicol = x1,x2,…,xn-1 } ---------------------------------------------------------------------- T infoBiColaFrente() /* Retorna el elemento que está al frente de la bicola */
  • 2. { pre: n > 0 } { post: infoBiColaFrente = x1 } ---------------------------------------------------------------------- T infoBiColaFinal() /* Retorna el elemento que está al final de la bicola */ { pre: n > 0 } { post: infoBiColaFinal = xn } ---------------------------------------------------------------------- bool vaciaBiCola() /* Informa si la bicola está vacía */ { post: vaciaBiCola = ( bicol = ) } ---------------------------------------------------------------------- void destruirBiCola() /* Destruye la bicola retornando toda la memoria ocupada */ { post: la bicola ha sido destruida } 3.52 3.53 //Nodo.java public class Nodo { private Object o; private Nodo next; private Nodo back; public Nodo (){ o=null; next=null; back=null; } public Nodo(Object o, Nodo next,Nodo back){ this.o=o; this.next=next; this.back=back; } public void setValor(Object z){ o=z;
  • 3. } public Object getValor(){ return o; } public Nodo getNext(){ return next; } public void setNext(Nodo next){ this.next=next; } public Nodo getBack(){ return back; } public void setBack(Nodo back){ this.back= back; } } // Bicola.java public class Bicola { Nodo head, tail; int size; public void inicBicola() { head = new Nodo(); tail = new Nodo(); head.setNext(tail); tail.setBack(head); size=0; } public void insertFirst(Object obj) { Nodo h = head; Nodo node = new Nodo(); node.setValor(obj); node.setNext(h); h.setBack(node); head = node; if (size == 0) tail = node; size++; } public void insertLast(Object obj) { Nodo t = tail; Nodo node = new Nodo();
  • 4. node.setValor(obj); node.setBack(t); t.setNext(node); tail = node; if (size == 0) head = node; size++; } public Object removeFirst() { if (head == null) return null; Object val = head.getValor(); head = head.getNext(); size--; return val; } public Object removeLast() { if (tail == null) return null; Object val = tail.getValor(); tail = tail.getBack(); size--; return val; } public int size() { return size; } public Object infoBicolaFirst() { return head.getValor(); } public Object infoBicolaLast() { return tail.getValor(); } public boolean vaciaBicola() { return size==0?true:false; } public String toString() { String s = "head ["; Nodo aux = head; for (int i = 0; i < size; i++) { s += aux.getValor(); if (aux == tail) { break; } s += "-"; aux = aux.getNext(); }
  • 5. return s + "] tail"; } } //Demo Bicola public class DemoBicolas { public static void main(String[]args) { Bicola bicola1=new Bicola(); bicola1.inicBicola(); bicola1.insertFirst(45); bicola1.insertLast(4); bicola1.insertFirst(11); bicola1.insertFirst(22); bicola1.insertFirst(33); bicola1.insertFirst(5); bicola1.insertFirst(1); System.out.println(bicola1.toString()); System.out.println(bicola1.size()); bicola1.removeFirst(); System.out.println(bicola1.toString()); bicola1.removeLast(); System.out.println(bicola1.toString()); } } 3.54 3.55 import java.io.*; import java.util.*; /** * Clase para introducir datos de un fichero de texto con enteros a una tabla de frecuencias.
  • 6. */ public class Estadisticas { public static void main(String[] args) { Tabla t = new Tabla(); t.aniadir(1); // System.out.print(t.getInfoEnt(1)); t.aniadir(2); t.aniadir(3); t.aniadir(4); t.aniadir(1); t.aniadir(2); System.out.print(t.getInfoEnt(1)); } } /** * Clase para representar frecuencias de enteros. * * @author * @version */ class Frecuencia { private int numero; private int frecuencia; /** * Construye una frecuencia */ public Frecuencia(int numero, int frecuencia) {
  • 7. this.numero = numero; this.frecuencia = frecuencia; } /** * Método observador del entero */ public int getNumero() { return numero; } /** * Método observador de la frecuencia; */ public int getFrecuencia() { return frecuencia; } /** * Suma uno a la frecuencia */ public void sumar1() { frecuencia++; } } public class Tabla { private static final int MAX_NUM_DATOS = 1000; private Frecuencia[] tabla; private int total; /** * Construye una tabla de frecuencias vacía. */ public Tabla() { tabla = new Frecuencia[MAX_NUM_DATOS]; inicializar(); } /** * Vacía la tabla de frecuencias.
  • 8. */ public void inicializar() { total = 0; } /** * Incrementa en uno la frecuencia de un entero de la tabla. * La implementación limita a MAX_NUM_DATOS el número de datos distintos. * Si no cabe en la tabla, devuelve error=cierto * @param n entero a mofificar la frecuencia en uno. * @return cierto si no cabe en la tabla. Falso, en caso contrario. */ public boolean aniadir(int n) { //encontrar n en tabla int pos = buscar(n); System.out.println(pos); return true;} /* boolean error = false; //si está n en tabla, recolocar if (pos != -1) { tabla[pos].sumar1(); while (pos > 0 && tabla[pos].getNumero() > tabla[pos-1].getNumero()) { Frecuencia aux = tabla[pos]; tabla[pos] = tabla[pos-1]; tabla[pos-1] = aux; pos--; } } else { //si no esá, introducir al final si se puede if (getTotal() < tabla.length) { total++; tabla[getTotal()] = new Frecuencia(n, 1); } else { error = true; } } return error; }*/ /** * Retorna el número de enteros distintos de la tabla. * @return enteros distintos de la tabla. */ public int getTotal() { return total; } /** * Retorna la frecuencia i-ésima ordenada de mayor a menor * @param i posición i-ésima
  • 9. * @return frecuencia i-ésima ordenada de mayor a menor. Si no exite la posición i-ésima * se retorna la frecuencia (0,0) */ public Frecuencia info(int i) { if (0 <= i && i < getTotal()) { return new Frecuencia(getInfoEnt(i), getInfoFrec(i)); } else { return new Frecuencia(0, 0); } } /** * Retorna el entero i-ésimo ordenado de mayor a menor de la tabla de frecuencias. * @param i posición i-ésima de la tabla * @return entero en la posición i-ésima. Si no existe la posición i-ésima, retorna 0 */ public int getInfoEnt(int i) { if (i <= 0 && i < getTotal()) { return tabla[i].getNumero(); } else { return 0; } } /** * Retorna el valor de la frecuencia i-ésima ordenada de mayor a menor de la tabla. * @param i posición i-ésima * @return entero con la frecuencia de la posición i-ésima. Si no existe la posición, * se retorna 0 */ public int getInfoFrec(int i) { if (i <= 0 && i < getTotal()) { return tabla[i].getFrecuencia(); } else { return 0; } } /** * Retorna la posición dentro de la tabla de un número dado. * @param n número a buscar * @return posición dentro de la tabla donde está n. Si no se encuentra, retorna -1; */ private int buscar(int n) { int i;
  • 10. for (i = 0; i < getTotal() && getInfoEnt(i) != n; i++); if (i == getTotal() || getInfoEnt(i) != n) { i = -1; } return i; } } 3.56 public class BolsaLista { // ----------------------------------------------------------------- // Atributos // ----------------------------------------------------------------- /** * Primer elemento que tiene la estructuraBolsa */ private Elemento primerElemento; /** * Límite inferior de la estructuraBolsa */ private int inferior; /** * Límite superior de la estructuraBolsa */ private int superior; /** * Cantidad de elementos que tiene la estructuraBolsa */ private int cantidadElementos; // ----------------------------------------------------------------- // Constructores // -----------------------------------------------------------------
  • 11. /** * Método constructor por parámetros * @param inf Limite inferior * @param sup Limite superior */ public BolsaLista( int inf, int sup ) { primerElemento = null; cantidadElementos = 0; inferior = inf; superior = sup; } // ----------------------------------------------------------------- // Métodos // ----------------------------------------------------------------- /** * Agrega un elemento a la estructuraBolsa * <b>pre:</b> inferior < elem < superior <br> * <b>post:</b> elem es agregado a la lista encadenada * @param elem Elemento que se va a agregar a la estructuraBolsa */ public void agregar( int elem ) throws FueraLimiteException { if( elem > inferior && elem < superior ) { Elemento nodo = new Elemento( elem ); if( primerElemento == null ) primerElemento = nodo; else if( nodo.obtenerValor( ) < primerElemento.obtenerValor( ) ) { // Debe quedar como primer elemento de la lista primerElemento.insertarAntes( nodo ); primerElemento = nodo; } else { Elemento p = primerElemento; for( ; p.obtenerSiguiente( ) != null && p.obtenerSiguiente( ).obtenerValor( ) < nodo.obtenerValor( ); p = p.obtenerSiguiente( ) ) ; p.insertarDespues( nodo ); } cantidadElementos++; } else throw new FueraLimiteException( "Elemento fuera de rango" ); } /** * Elimina un elemento de la estructuraBolsa * <b>pre:</b> Existe un elemento en la lista encadenada tal que su valor es igual a elem <br>
  • 12. * <b>post:</b> elem es eliminado de la lista encadenada * @param elem Elemento que va a ser eliminado * @throws NoExisteException Se lanza la excepción si no se encuentra el elemento */ public void eliminar( int elem ) throws NoExisteException { Elemento elemento = new Elemento( elem ); if( primerElemento == null ) throw new NoExisteException( "Elemento no existe" ); else if( elemento.obtenerValor( ) == primerElemento.obtenerValor( ) ) { // Se debe eliminar el primer elemento de la lista primerElemento = primerElemento.desconectarPrimero( ); cantidadElementos--; } else { for( Elemento p = primerElemento.obtenerSiguiente( ); p != null; p = p.obtenerSiguiente( ) ) if( p.obtenerValor( ) == elemento.obtenerValor( ) ) { p.desconectarNodo( ); cantidadElementos--; return; } throw new NoExisteException( "Elemento no existe" ); } } /** * Informa si existe un elemento dado dentro de la estructuraBolsa * <b>post:</b> Retorna true si elem es encontrado * @param elem Elemento que va a ser buscado * @return true si encontró el elemento, false de lo contrario */ public boolean buscar( int elem ) { Elemento elemento = new Elemento( elem ); for( Elemento p = primerElemento; p != null; p = p.obtenerSiguiente( ) ) if( p.obtenerValor( ) == elemento.obtenerValor( ) ) return true; return false; } /** * Retorna el elemento que se encuentra en la posición pos de la estructuraBolsa, suponiendo que los elementos están situados ordenados de manera ascendentemente * <b>pre:</b> 1 <= pos <= cantidadElementos <br> * <b>post:</b> Se retorna el valor del elemento en la posición pos <br> * @param pos Posición del elemento que se quiere buscar * @return Elemento que se encuentra en la posición pedida * @throws NoExisteException Se lanza la excepción si no se encuentra la posición pedida
  • 13. */ public int retornar( int pos ) throws NoExisteException { if( pos > cantidadElementos ) throw new NoExisteException( "La posición que desea se encuentra fuera del rango" ); else { Elemento temp = primerElemento; for( int i = 1; i < pos; i++ ) temp = temp.obtenerSiguiente( ); return temp.obtenerValor( ); } } /** * Retorna el número de elementos de la estructuraBolsa * <b>post:</b> Retorna cantidadElementos <br> * @return Longitud de la estructuraBolsa */ public int darLongitud( ) { return cantidadElementos; } /** * Retorna el límite inferior de la estructuraBolsa * <b>post:</b> Retorna inferior <br> * @return Límite inferior de la estructuraBolsa */ public int darInferior( ) { return inferior; } /** * Retorna el límite superior de la estructuraBolsa * <b>post:</b> Retorna superior <br> * @return Límite superior de la estructuraBolsa */ public int darSuperior( ) { return superior; } /** * Retorna un iterador sobre los elementos de la estructuraBolsa * @return Un iterador sobre los elementos de la estructuraBolsa */ /* public IIteradorBolsa darIterador( ) { IteradorBolsa1 iterador = new IteradorBolsa1( primerElemento ); return iterador; } */
  • 14. } /*/*/*/*/*/ /** * Clase que representa un elemento de una estructuraBolsa */ public class Elemento { // ----------------------------------------------------------------- // Atributos // ----------------------------------------------------------------- /** * El elemento que se tiene después del actual */ private Elemento siguiente; /** * El elemento que se tiene antes del actual */ private Elemento anterior; /** * Valor del elemento */ private int valor; // ----------------------------------------------------------------- // Constructores // ----------------------------------------------------------------- /** * Constructor por parámetros * @param pValor Valor */ public Elemento( int pValor ) { valor = pValor; siguiente = null; } // ----------------------------------------------------------------- // Métodos // -----------------------------------------------------------------
  • 15. /** * Retorna el valor que tiene el elemento * @return Valor */ public int obtenerValor( ) { return valor; } /** * Inserta el nodo antes del actual. * @param nodo Nodo a insertar */ public void insertarAntes( Elemento nodo ) { nodo.siguiente = this; nodo.anterior = anterior; if( anterior != null ) anterior.siguiente = nodo; anterior = nodo; } /** * Inserta el nodo después del actual. * @param nodo Nodo a insertar */ public void insertarDespues( Elemento nodo ) { nodo.siguiente = siguiente; nodo.anterior = this; if( siguiente != null ) siguiente.anterior = nodo; siguiente = nodo; } /** * Desconecta el nodo de la lista suponiendo que es el primero. <br> * @return Nodo con el cual comienza la lista ahora */ public Elemento desconectarPrimero( ) { Elemento p = siguiente; siguiente = null; if( p != null ) { p.anterior = null; } return p; } /** * Desconecta el nodo de la lista suponiendo que no es el primero. */ public void desconectarNodo( )
  • 16. { Elemento ant = anterior; Elemento sig = siguiente; anterior = null; siguiente = null; ant.siguiente = sig; if( sig != null ) sig.anterior = ant; } /** * Retorna el siguiente elemento al actual * @return Elemento, pude ser null */ public Elemento obtenerSiguiente( ) { return siguiente; } /** * Representación en String del elemento */ public String toString( ) { return "" + valor; } } public class FueraLimiteException extends Exception{ FueraLimiteException(String m) { super(m); } } /** * Clase que representa a un iterador que va a utilizar un apuntador a un primer elemento */ public class IteradorBolsa1 {
  • 17. // ----------------------------------------------------------------- // Atributos // ----------------------------------------------------------------- /** * Elemento al que apunta el iterador */ private Elemento elemento; // ----------------------------------------------------------------- // Constructores // ----------------------------------------------------------------- /** * Constructor del iterador * @param primerElemento Primer elemento del iterador */ public IteradorBolsa1( Elemento primerElemento ) { elemento = primerElemento; } // ----------------------------------------------------------------- // Métodos // ----------------------------------------------------------------- /* * (non-Javadoc) * * @see uniandes.cupi2.bolsa.mundo.IIteradorBolsa#darSiguiente() */ public int darSiguiente( ) { if( elemento != null ) { int valor = elemento.obtenerValor( ); elemento = elemento.obtenerSiguiente( ); return valor; } else return Integer.MAX_VALUE; } /* * (non-Javadoc) * * @see uniandes.cupi2.bolsa.mundo.IIteradorBolsa#haySiguiente() */ public boolean haySiguiente( ) { return elemento == null ? false : true; } }
  • 18. public class NoExisteException extends Exception{ NoExisteException(String m) { super(m); } }