Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UCE
SUSTENTANTE:
Joel De Len 2014-0935
DIRECTOR:
Ing. Daro Alexander Ramos, M. Eng.
Ao Acadmico 2017
San Pedro de Macors, R. D.
INDICE
INTRODUCCIN ...................................................................................................................................................1
1 PILAS, COLAS Y BSQUEDAS ............................................................................................................................2
1.1 Pila .............................................................................................................................................................2
1.2 Cola ............................................................................................................................................................7
1.3 Bsquedas .............................................................................................................................................. 12
2 LISTAS ENLAZADAS Y DOBLEMENTE ENLAZADAS.......................................................................................... 18
2.1 Listas enlazadas simples ......................................................................................................................... 18
2.2 Lista doblemente enlazada..................................................................................................................... 20
3 ARCHIVOS Y/O ALMACENAMIENTO INTERNO .............................................................................................. 23
3.1 Documentacin ...................................................................................................................................... 23
3.2 Ejemplo ................................................................................................................................................... 24
3.3 Explicacin .............................................................................................................................................. 24
4 ARBOLES Y GRAFOS ....................................................................................................................................... 25
4.1 Arboles.............................................................................................................................................. 25
4.2 Grafos ............................................................................................................................................... 29
BIBLIOGRAFIA ................................................................................................................................................... 33
INTRODUCCIN
En la prctica, la mayor parte de informacin til no aparece aislada en forma de datos simples, sino
que lo hace de forma organizada y estructurada. Los diccionarios, guias, enciclopedias, etc., son
colecciones de datos que seran intiles si no estuvieran organizadas de acuerdo con unas
determinadas reglas. Adems, tener estructurada la informacin supone ventajas adicionales, al
facilitar el acceso y el manejo de los datos. Por ello parece razonable desarrollar la idea de la
agrupacin de datos, que tengan un cierto tipo de estructura y organizacin interna. Aqu es donde
hace aparicin la importancia de estructuras de datos.
Las estructuras de datos, aunque de manera similar no se manejan de igual forma en todos los
lenguajes de programacin y como estudiosos de la materia y para ponerlas en prctica cuando la
situacin lo amerite, es necesario conocer las sintaxis de los lenguajes que utilizamos que hacen
posible su uso.
En el presente trabajo se conocern y analizaran las principales estructuras de datos que son utilizadas,
todo esto enfocado al lenguaje de programacin C, con sus respectiva documentacin, ejemplos y
explicacin.
1
1 PILAS, COLAS Y BSQUEDAS
1.1 Pila
1.1.1 Documentacin
Una pila (stack) es una coleccin ordenada de elementos a los que slo se puede acceder por un nico
lugar o extremo de la pila. Los elementos de la pila se aaden o quitan (borran) de la misma slo por
su parte superior (cima) de la pila. ste es el caso de una pila de platos, una pila de libros, etc.
Una pila es una estructura de datos de entradas ordenadas tales que solo se pueden introducir
y eliminar por un extremo, llamado cima.
Poseen una propiedad especfica que es ltimo en entrar primero en salir. Se conoce a las pilas
como estructura de datos LIFO (last-in, first-out). Las operaciones usuales en la pila son Insertar y
Quitar. La operacin Insertar (push) aade un elemento en la cima de la pila y la operacin Quitar
(pop) elimina o saca un elemento de la pila. El ltimo elemento aadido a la pila es el primero que se
quita de la pila.
Una pila se puede implementar mediante armys o mediante listas enlazadas. Una implementacin
esttica se realiza utilizando un array de tamao fijo y una implementacin dinmica mediante una
lista enlazada.
En C para definir una pila con arrays se utiliza una estructura. Los miembros de la estructura pila
incluyen una lista (array) y un ndice o puntero a la cima de la pila; adems una constante con el
mximo nmero de elementos. El tipo pila junto al conjunto de operaciones de la pila se pueden
encerrar en un archivo de inclusin. AI utilizar un array para contener los elementos de la pila hay
que tener en cuenta que el tamao de la pila no puede exceder el nmero de elementos del array y la
condicin pila llena ser significativa para el diseo.
El mtodo usual de introducir elementos en una pila es definir el fondo de la pila en la posicin O del
array y sin ningn elemento en su interior, es decir, definir una pila vaca; a continuacin, se van
introduciendo elementos en el array (en la pila) de modo que el primer elemento aadido se introduce
en una pila vaca y en la posicin O, el segundo elemento en la posicin 1, el siguiente en la posicin
2 y as sucesivamente. Con estas operaciones el puntero (apuntador) que apunta a la cima de la pila se
2
va incrementando en 1 cada vez que se aade un nuevo elemento; es decir, el puntero de la pila
almacena el ndice del array que se est utilizando como cima de la pila. Los algoritmos de introducir
insertar (push) y quitar sacar (pop) datos de la pila utilizan el ndice del array como puntero de
la pila son:
Insertar (push)
Quitar (pop)
1.1.2 Ejemplo
Escribir un programa que utilice la clase Pila para comprobar si una determinada frase/palabra (cadena
de caracteres) es un palndromo. Nota. Una palabra o frase es un palndromo cuando la lectura directa
e indirecta de la misma tiene igual valor: alila, es un palndromo; cara (arac) no es un palndromo.
3
4
5
1.1.3 Explicacin
La palabra se lee carcter a carcter, de tal forma que a la vez que se aade a un strinq se inserta en
una pila de caracteres. Una vez leda la palabra, se compara el primer carcter del string con el carcter
que se extrae de la pila, si son iguales sigue la comparacin con siguiente carcter del string y de la
pila; as hasta que la pila se queda vaca o hay un carcter no coincidente. Al guardar los caracteres
de la palabra en la pila se garantiza que las comparaciones son entre caracteres que estn en orden
inverso: primero con ltimo.. . La codificacin consta de tres archivos, el archivo pilarray.h con las
declaraciones de la pila; el archivo pilarray.c con la implementacin de las operaciones de la pila y el
archivo paldromo.c para leer la palabra y comprobar con ayuda de la pila si es palndromo.
6
1.2 Cola
1.2.1 Documentacin
Una cola es una estructura de datos que almacena elementos en una lista y permite acceder a los datos
por uno de los dos extremos de la lista. Un elemento se inserta en la cola (parte final) de la lista y se
suprime o elimina por la frente (parte inicial, cabeza) de la lista. Las aplicaciones utilizan una cola
para almacenar elementos en su orden de aparicin o concurrencia.
Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se almacenan y, por
consiguiente, una cola es una estructura de tipo FIFO (first-in-firs-out, primero en entrar/primero en
salir o bien primero en llegar/primero en ser servido).
Desde el punto de vista de estructura de datos, una cola es similar a una pila, en donde los datos se
almacenan de un modo lineal y el acceso a los datos slo est permitido en los extremos de la cola.
Las acciones que estn permitidas en una cola son:
7
8
1.2.2 Ejemplo
Una variacin del famoso problema matemtico llamado problema de Jos permite generar
nmeros de la suerte. Se parte de una lista inicial de n nmeros, esta lista se va reduciendo siguiendo
el siguiente algoritmo:
9
10
1.2.3 Explicacin
El problema se va a resolver utilizando la estructura Cola. En primer lugar, se genera una lista de n
nmeros aleatorios que se almacena en una cola. A continuacin, se siguen los pasos del algoritmo,
en cada pasada se mueven los elementos de la cola a otra cola excepto aquellos que estn en las
posiciones (mltiplos de n1) + 1. Estas posiciones I se pueden expresar matemticamente:
1 modulo n1 = 1
El tipo cola y las operaciones sobre colas se agrupan en el archivo de inclusin co1a.h implementado
con estructuras dinmicas. Adems, se aade la operacin de mostrarCola para escribir los nmeros
que quedan en la lista.
11
1.3 Bsquedas
Hay muchas aplicaciones que requieren una bsqueda de un elemento en particular. La bsqueda se
refiere a encontrar si un elemento particular est presente en la lista. El mtodo que utilizamos para
esto depende de cmo estn los elementos de la lista. Si la lista es una lista desordenada, entonces
usamos la bsqueda lineal o secuencial, mientras que si la lista es una lista ordenada, utilizamos la
bsqueda binaria.
1.3.1.2 Ejemplo
#include <stdio.h>
#define MAX 10
int i, flag = 0;
for(i=0;i<n;i++)
flag =1;
break;
if( flag == 0)
12
printf("The element whose value is %d is not present in the list\n", element);
int i;
for(i=0;i<n;i++)
scanf("%d",&list[i]);
int i;
for(i=0;i<n;i++)
printf("%d\t",list[i]);
void main()
scanf("%d",&n);
readlist(list,n);
13
printlist(list,n);
scanf("%d",&element);
lsearch(list,n,element);
1.3.1.3 Explicacin
1. En el mejor de los casos, el procedimiento de bsqueda finaliza despus de una sola
comparacin, mientras que, en el peor de los casos, har n comparaciones.
2. En promedio, realizar aproximadamente n / 2 comparaciones, ya que el tiempo de bsqueda
es proporcional al nmero de comparaciones que se requiere realizar.
3. La bsqueda lineal requiere un tiempo medio proporcional a O (n) para buscar un elemento.
Por lo tanto, para buscar n elementos, se requiere un tiempo proporcional a O (n^2).
4. Concluimos que esta tcnica de bsqueda es preferible cuando el valor de n es pequeo. La
razn de esto es la diferencia entre n y n^2 es pequeo para valores menores de n.
14
1.3.2 Bsqueda binaria
1.3.2.1 Documentacin
El requisito previo para usar la bsqueda binaria es que la lista debe ser una ordenada. Comparamos
el elemento a buscar con el elemento situado aproximadamente en el centro de la lista. Si se encuentra
una coincidencia, la bsqueda finaliza correctamente. De lo contrario, continuamos la bsqueda de la
clave de una manera similar ya sea en la mitad superior o en la mitad inferior. Si los elementos de la
lista estn ordenados ascendentemente, y la clave es menor que el elemento en el centro de la lista, la
bsqueda se contina en la mitad inferior. Si los elementos de la lista estn dispuestos en orden
descendente y la clave es mayor que el elemento en el centro de la lista, la bsqueda contina en la
mitad superior de la lista. Los procedimiento para la bsqueda binaria se da en el siguiente programa.
1.3.2.2 Ejemplo
#include <stdio.h>
#define MAX 10
l = 0;
u = n-1;
while(l <= u)
m = (l+u)/2;
flag =1;
15
break;
else
l = m+1;
else
u = m-1;
if( flag == 0)
int i;
for(i=0;i<n;i++)
scanf("%d",&list[i]);
int i;
for(i=0;i<n;i++)
16
printf("%d\t",list[i]);
void main()
scanf("%d",&n);
readlist(list,n);
printlist(list,n);
scanf("%d",&element);
bsearch(list,n,element);
1.3.2.3 Explicacin
17
2 LISTAS ENLAZADAS Y DOBLEMENTE ENLAZADAS
Una lista enlazada consta de un conjunto de nodos. Un nodo consta de un campo dato y un puntero
que apunta al siguiente elemento de la lista.
2.1.1 Documentacin
Un algoritmo para la creacin de una lista enlazada entraa los siguientes pasos:
2.1.2 Ejemplo
Crear una lista de nmeros aleatorios e insertar los nuevos nodos por la cabeza de la lista. Una vez
creada la lista, se ha de recorrer los nodos pura mostrar los nmeros pares.
18
2.1.3 Explicacin
La funcin InsertarCabezaLista ( ) aade un nodo a la lista, siempre como nodo cabeza. El priiner
argumento es un puntero a puntero porque tiene que modificar la variable cabeza, que es a su vez un
puntero a Nodo. La funcin NuevoNodo ( ) reserva memoria para un nodo, asigna el campo dato y
devuelve la direccin del nodo creado.
19
2.2 Lista doblemente enlazada
2.2.1 Documentacin
Hasta ahora el recorrido de una lista se realizaba en sentido directo (adelante) o, en algunos casos, en
sentido inverso (hacia atrs). Sin embargo, existen numerosas aplicaciones en las que es conveniente
poder acceder a los elementos o nodos de una lista en cualquier orden. En este caso se recomienda el
uso de una lista doblemente enlazada. En tal lista, cada elemento contiene dos punteros, aparte del
valor almacenado en el elemento. Un puntero apunta al siguiente elemento de la lista y el otro puntero
apunta al elemento anterior.
2.2.2 Ejemplo
Se va a crear una lista doblemente enlazada con nmeros enteros obtenidos aleatoriamente. Una vez
creada la lista se desea eliminarse los nodos que estn fuera de un rango determinado.
20
21
2.2.3 Explicacin
La insercin de elementos en la lista se hace por el nodo cabecera. El nmero de elementos de la lista
se pide para ser introducido por teclado. Tambin se pide por teclado el rango de valores que deben
de estar en la lista. Para eliminar los elementos se recorre la lista, los nodos que no estn dentro del
rango se borran de la lista. Para borrar los nodos se utiliza la funcin eliminar ( ) , teniendo en cuenta
que la direccin del nodo a suprimir ya se tiene.
22
3 ARCHIVOS Y/O ALMACENAMIENTO INTERNO
3.1 Documentacin
Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo,
las grandes cantidades de datos se almacenan normalmente en un dispositivo de memoria secundaria.
Estas colecciones de datos se conocen como archivos (antiguamente ficheros).
En c, un archivo es un concepto lgico que puede aplicarse a muchas cosas desde archivos de disco
hasta terminales o una impresora. Se asocia una secuencia con un archivo especifico realizando una
operacin de apertura. Una vez que el archivo est abierto, la informacin puede ser intercambiada
entre este y el programa.
Se puede conseguir la entrada y la salida de datos a un archivo a travs del uso de la biblioteca de
funciones; C no tiene palabras claves que realicen las operaciones de E/S. La siguiente tabla da un
breve resumen de las funciones que se pueden utilizar. Se debe incluir la librera STDIO.H. Observe
que la mayora de las funciones comienzan con la letra F, esto es un vestigio del estndar C de Unix.
Nombre Funcin
23
feof() Devuelve cierto si se llega al final del archivo.
3.2 Ejemplo
3.3 Explicacin
El programa anterior maneja las cadenas de caracteres en un archivo. Se introducen las instrucciones
fgets y fputs para la lectura y escritura de cadenas de caracteres, respectivamente.
24
4 ARBOLES Y GRAFOS
4.1 Arboles
4.1.1 Documentacin
Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. binario, cada
nodo puede tener, cero, uno o dos hijos (subrboles). Se conoce el nodo de como hijo izquierdo y el
nodo de la derecha como hijo derecho.
Un rbol binario es una estructura recursiva. Cada nodo es el raz de su propio subrbol y tiene hijos,
que son races de rboles llamados los subrboles derecho e izquierdo del nodo, respectivamente.
Una vez que se tiene creado un rbol binario, se pueden realizar diversas operaciones sobre l. El
hacer uso de una operacin u otra depender de la aplicacin que se le quiera dar al rbol. Algunas de
las operaciones tpicas que se realizan en rboles binarios son:
Determinar su altura.
Determinar su nmero de elementos.
Hacer una copia.
Visualizar el rbol binario en pantalla o en impresora.
Determinar si dos rboles binarios son idnticos.
Borrar (eliminar el rbol).
Si es un rbol de expresin', evaluar la expresin.
Si es un rbol de expresin, obtener la forma de parntesis de la expresin.
Todas estas operaciones se pueden realizar recorriendo el rbol binario de un modo sistemtico. El
recorrido de un rbol es la operacin de visita al rbol, o lo que es lo mismo, la visita a cada nodo del
rbol una vez y slo una. La visita de un rbol es necesaria en muchas ocasiones, por ejemplo, si se
desea imprimir la informacin contenida en cada nodo. Existen diferentes formas de visitar o recorrer
un rbol que se estudiarn ms tarde
25
4.1.2 Ejemplo
Con los registros de estudiantes formar un rbol binario de bsqueda, ordenado respecto al campo
clave nummat. El programa debe de tener las opciones de mostrar los registros ordenados y eliminar
un registro dando el nmero de matrcula.
26
27
4.1.3 Explicacin
Cada registro tiene slo dos campos de informacin: nombre y nummat. Adems, los campos de
enlace con el subrbol izquierdo y derecho. rboles 533 Las operaciones que se van a implementar
son las de insertar, eliminar, buscar y visualizar el rbol. Los algoritmos de las tres primeras
operaciones ya estn descritos anteriormente. La operacin de visual izar va a consistir en un recorrido
en inorden, cada vez que se visite el nodo raz se escribe los datos del estudiante.
28
4.2 Grafos
4.2.1 Documentacin
Los grafos son una estructura de datos que consiste en dos componentes:
Los grafos se utilizan para representar muchas aplicaciones de la vida real: Los grficos se utilizan
para representar redes. Las redes pueden incluir caminos en una ciudad o red telefnica o red de
circuito. Los grficos tambin se utilizan en redes sociales como linkedIn, facebook. Por ejemplo, en
facebook, cada persona se representa con un vrtice (o nodo). Cada nodo es una estructura y contiene
informacin como id de persona, nombre, gnero y lugar.
1. Matriz de Adyacencia
2. Lista de Adjacencia
4.2.2 Ejemplo
El siguiente es un cdigo en c de la representacin de una lista de adjacencia de un grafo no dirigido.
#include <stdio.h>
#include <stdlib.h>
29
};
30
int i;
for (i = 0; i < V; ++i)
graph->array[i].head = NULL;
return graph;
}
31
}
return 0;
}
4.2.3 Explicacin
Pros: Ahorra espacio O (| V | + | E |). En el peor de los casos, puede haber C (V, 2) nmero de aristas
en un grfico consumiendo as el espacio O (V ^ 2). Agregar un vrtice es ms fcil.
Contras: Las consultas como si hay un borde desde el vrtice u al vrtice v no son eficientes y se
pueden hacer O (V).
32
BIBLIOGRAFIA
33