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

ORGANIZACIN DE ARCHIVOS Y ESTRUCTURA DE DATOS

BICOLAS

Una

variacin del tipo de datos cola es una estructura bicola. Es un conjunto ordinal de elementos en el cual se pueden aadir o quitar elementos de cualquier extremo de la misma. Es decir es una Cola bidireccional.

los dos extremos de una bicola se llaman IQUIERDO y DERECHO respectivamente.

Para

representar una bicola se puede elegir una representacin esttica, con arrays bien una representacin dinmica con punteros.

En

la representacin dinmica la mejor opcin es mantener la bicola con una lista doblemente enlazada: los extremos de la lista se representa con las variables puntero izquierdo y derecho. En la representacin esttica se mantienen los elementos de la bicola con un array circular y dos variables ndice del extremo izquierdo y derecho.

Al

tipo de datos bicola se puede imponer restricciones respecto al tipo de entrada al tipo de salida. Bicola con restriccin de entrada es aquella que slo permite inserciones por uno de los dos extremos, pero permite la eliminacin por los dos extremos.

Una

Una

Bicola con restriccin de entrada es aquella que slo permite inserciones por uno de los dos extremos, pero permite la eliminacin por los dos extremos.

Una

Bicola con restriccin de Salida es aquella que permite inserciones por los dos extremo, pero slo permite retirar elementos por un extremos

COLAS DE PRIORIDAD
El

trmino cola sugiere la forma en que esperan ciertas personas u objetos la utilizacin de un determinado servicio.

El

trmino PRIORIDAD sugiere que el servicio no se proporciona nicamente aplicando el concepto de cola (el primero en llegar es el primer en ser atendido) sino que cada persona tiene asociada una prioridad basada en un criterio objetivo.

Un

ejemplo tpico de organizacin formando colas de prioridades, es el sistema de tiempo compartido necesario para mantener un conjunto de procesos que esperan servicio para trabajar. Los diseadores de estos sistemas asignan cierta prioridad a cada proceso

El orden en que los elementos son procesados y por tanto eliminados sigue estas reglas: Se elige la lista de elementos que tiene la mayor prioridad. En la lista de mayor prioridad, los elementos se procesan segn el orden de llegada; en definitiva, segn la organizacin de una cola: primero en llegar, primero en ser procesado

1.

2.

Las

colas de prioridades pueden implementar de dos formas: una nica lista

Mediante

Mediante

una lista de colas

1. Prioridad (x) > Prioridad (y) 2. Ambos tienen la misma prioridad, pero x se aadi antes que y

siguiente
Datos Cp

siguiente
Datos Datos

siguiente
Datos

siguiente

P1

P2

P3

Pn

Cola de prioridad con una lista enlazada

Los

nmeros de prioridad tiene el significado Habitual : a menor nmero mayor prioridad . realizacin presenta como principal ventaja que es inmediato determinar el siguiente nodo a procesar: siempre ser el primero de la lista.

Esta

Sin

embargo, aadir un nuevo elemento supone encontrar la posicin de insercin dentro de la lista.

Leer un elemento en una cola caso general: Hacemos que nodo apunte al primer elemento de la cola, es decir a primero. Asignamos a primero la direccin del segundo nodo de la cola: primero->siguiente. Guardamos el contenido del nodo para devolverlo como retorno, y si deseamos puede que la operacin de lectura en colas implican tambin borrar. Liberamos la memoria asignada al primer nodo, el que queremos eliminar. Si primero es NULL, hacemos que ultimo tambin apunte a NULL, ya que la lectura ha dejado la cola vaca.

Leer un elemento en una cola con ms de un elemento:

Usaremos un puntero a un nodo auxiliar: Hacemos que nodo apunte al primer elemento de la cola, es decir a primero. Asignamos a primero la direccin del segundo nodo de la pila: primerosiguiente. Guardamos el contenido del nodo para devolverlo como retorno, recuerda que la operacin de lectura en colas puede implicar tambin borrar. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.

Leer

un elemento en una cola con un solo elemento:

Hacemos que nodo apunte al primer elemento de la pila, es decir a primero. Asignamos NULL a primero, que es la direccin del segundo nodo terico de la cola: primero->siguiente. Guardamos el contenido del nodo para devolverlo como retorno, recuerda que la operacin de lectura en colas puede implicar tambin borrar. Liberamos la memoria asignada al primer nodo, el que queremos eliminar. Hacemos que ultimo apunte a NULL, ya que la lectura ha dejado la cola vaca.

Pilas
Definicin Una pila es un de estructura de datos en la que slo se pueden insertar y eliminar nodos en uno de los extremos de la pila. Estas operaciones se conocen como "push" y "pop", respectivamente "empujar" y "tirar". Adems, las escrituras de datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo ledo.

Estas

caractersticas implican un comportamiento de lista LIFO (Last In First Out), el ltimo en entrar es el primero en salir.

El nodo tpico para construir pilas es el mismo que vimos


struct

nodo { int dato; struct nodo *siguiente; };

Declaraciones de tipos para manejar pilas en C:


typedef

struct _nodo { int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Pila;

tipoNodo

es el tipo para declarar nodos, evidentemente.


es el tipo para declarar punteros a un nodo. es el tipo para declarar pilas.

pNodo

Pila

Pila con arrays


Un

array constituye el depsito de los elementos de la pila. El rango de array debe esr lo suficientemente amplio para poder contener el mximo previsto de elemento de la pila. Un extremo del array se considera el fondo de la pila, que permanece fijo

La

parte superior de la pila, cima, estar cambiando dinmicamente durante la ejecucin del programa.
del array, una variable entera nos sirve para tener en todo momento el ndice del array que contiene el elemento cima. Las declaraciones, procedmientos y funciones para representar el TAD pila forman parte de la unidad pilas.

Adems

Pila mediante variables dinmicas


La

implementacin dinmica de una pila se hace almacenando los elementos como nodos de una lista enlazada, con la particularidad de que siempre se quiera meter un elemento se har por el mismo extremo que se extraer.

Esta

realizacin tiene la ventaja de que el tamao se ajusta exactamente a los elementos de la pila. Sin embargo, para cada elemento es necesaria ms memoria, ya que hay que guardar el campo de enlace. En la realizacin de arrays hay que establecer un mximo de posibles elementos, aunque el acceso es ms rpido, ya que se hace con una variable sub indicada

Una

de las aplicaciones ms tpicas del TAD pila es almacenar los caracteres de que consta una expresin aritmtica con el fin de evaluar el valor numrico de dicha expresin. Una expresin artimtica est formada por operandos y operadores.

As,

la expresin

R = x*y (A+B)
Est

escrita de la forma habitual: el operador en medio de los operando.


conoce como notacin INFIJA.

Se

Conviene

recordar que las operaciones tienen distintos niveles de precedencia:


() Nivel Mayor de

Parntecis

prioridad Pontencia Multip/Divisin Suma y resta Nivel menor de prioridad

Notaciones Prefija y Postfija

La

forma habitual de escribir operaciones es situar el operando entre sus dos operandos con la citada infija. Esta forma de notacin obliga en muchas ocasiones a utilizar parntesis para indicar el orden de evaluacin.

A*b

/ a+c A*b /(a+c)

Representan

distintas expresiones al no poner parntesis. Igual ocurre con las expresiones:

A-b/c+d
(A-b)/c+d

La

notacin en que el operador se coloca delante de los dos operandos, notacin prefija, se conoce como notacin polaca (en honor del matemtico polaco que la estudio) infija

A*b/(a+c)

A+b/*ac /Ab+ac prefija

A*b/a+c

infija

*Ab/a+c /*Aba+c +/*Abac

prefija

(A-b)*c+d infija -Ab*c+d *-Abc + d +*-Abcd prefija

Podemos

observar que no es necesario la utilizacin de parntesis al escribir la expresin en notacin prefija. propiedad fundamental de la notacin prefija es que el orden en que se van a realizar las operaciones est determinado por las posiciones de los operadores y los operandos en la expresin. (216)

La

Recursividad Algoritmos recursivos

que tiene un procedimiento de llamarse

Capacidad

A SI MISMO Y EXIGE UN MOMENTO DE PARAR

Caractersticas de Funcin Recursividad


1.

Debe existir una condicin de Parada 2. Debe existir una condicin que invoque la recursividad (Se llame a s mimos) 3. Cuando se llame la Recursividad debe acercarse a la condicin de Parada

Ejemplo

n! si n = 0 (1) N *[(n-1)!] (3);

[Si n>0, n E N] (2)

As
(1) (2) (3)

4! = 1*2*3*4 Condicin de parada Condicin que invoca la recursividad Llamado a la Recursividad

Estos

detalles permiten a un procedimiento funcin recursivo repetirse con valores diferentes de parmetros

La

recursin es una alternativa a la iteracin muy elegante en la resolucin de problemas, especialmente si stos tiene naturaleza recursiva.

Normalmente,

una solucin recursiva es menos eficiente en trminos de tiempo de computadora que una solucin iterativa debido al tiempo adicional de llamada a funciones. muchos casos, la recursin permite especificar una solucin ms simple y natural para resolver un problema que en otro caso sera difcil.

En

Por

est razn la Recursin (recursividad) es una herramienta muy potente para la resolucin de problemas y la programacin

Un objeto recursivo es aquel que forma parte de s mismo. idea puede servir de ayuda para la definicin de conceptos matemticos.

Est

Suponga

que dispone de una rutina Q que contiene una sentencia de llamada a s mismo, o bien una sentencia de llamada a una segunda rutina que a su vez tiene una sentencia de llamada a la rutina original Q. se dice que Q es una rutina

Entonces

recursiva

SECUENCIA DE NMEROS DE FIBONACCI Esta serie numrica es un ejemplo tpico de cumplimiento de las dos propiedades generales de todo procedimiento recursivo.
La serie de Fibonacci es:

0,1,1,2,3,5,8,13,21,34 ..

El

trmino inicial es a0 =0, y los siguientes son a1=1, a2=2, a3=3, a4=5, a5=8 serie puede ser definida recursivamente del modo siguiente:

La

Fibonacci(n)=n si n=0 n=1 Fibonacci(n) = Fibonacci(n-2) + Fibonacci(n-1) para n>1

Esta

definicin recursiva hace referencia a ella misma dos veces. Y la condicin para que dejen de hacerse llamadas recursivas es que n sea 0 1
La

llamada recursiva se hace en trminos menores de n,n-2,n-1, por lo que se va acercando a los valores de los que depende la condicin de terminacin.

Cuando no utilizar recursividad


Se

puede, afirmar que la ejecucin de un programa recursivo va a ser ms lenta y menos eficiente que el programa iterativo que soluciona el mismo problema, aunque, a veces, la sencillez de la estructura recursiva justifica el mayor tiempo de ejecucin.

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