You are on page 1of 7

REPUBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUACIÓN
SUPERIOR
I.U.P. “SANTIAGO MARIÑO”
ESPECIALIDAD: ING. DE SISTEMAS
CATEDRA: PROGRAMACIÓN I

‘ESTRUCTURA DE DATOS’

ELABORADO POR:
BR. WILKINS SILVA
C.I.: V-19.098.288
SECCIÓN: 47-A

MARACAIBO, NOVIEMBRE DE 2007

PILAS 3.ARREGLOS 2...INDICE 1..COLAS 4..LISTAS ENLAZADAS DESGLOSE .

.7} */ .Matriz[9][19] Matriz[0][2]. /* equivale a a[4]={2.. double b[100] = {1. Dado que el número de elementos en un arreglo suele ser utilizado en distintos lugares de un programa.3. 3.ARREGLOS: Un ARREGLO es un conjunto de variables del mismo tipo que pueden ser referenciadas a través de un mismo nombre. -5.. 3.. asi. Instruye al compilador a que reserve una cantidad de memoria suficiente para almacenar 10 entidades enteras y referirse a esa memoria a traves del identificador Array. el tamaño será el mismo que el de la lista en este caso.4.. Matriz[1] La inicialización de un arreglo puede realizarse a través de una lista. 2. Define una region de memoria como para almacenar 200 reales en doble precisión.. el resto de los elementos se inicializan a 0. 1.. Ej: float a[5] = {0. Matriz[1][0]. si la lista es mas corta que el numero de elementos en el arreglo. Matriz[0][1]. Los arreglos pueden ser multidimensionales. . La forma de identificar a un elemento determinado es a través de un índice. La forma en que se organizan en la memoria estos 200 elementos es la siguiente: Matriz[0][0].0}.1.-5.1. /* los 99 restantes serán 0. La declaración int Array[10].. 7}..0 */ int a[] = {2.. asi por ejemplo double Matriz[10][20].. es buen estilo de programación el referenciarlo a través de una constante simbólica: #define N 10 int Array[N]. Los elementos individuales del arreglo se comiena a numerar a partir del elemento 0.2. 4. Se puede obviar el tamaño de un arreglo al inicializarlo con una lista.5}.3. [1]. Array[0] individualiza al primer elemento y Array[9] al último..

nOther = 0. 2. Otras operaciones posibles sobre la pila son la creación de una pila vacía. el último elemento en ser añadido será el primero en ser extraído.i. nDigit[ND]. primero en salir).'0']++. nWhite = 0. cada carácter separador. for(i = 0.PILAS Una PILA es una estructura de datos homogénea (elementos del mismo tipo). else if(c == ' ' || c == '\n' || c == '\t') nWhite++.nWhite). último en entrar. return 0. i++) nDigit[i] = 0.nOther). . secuencial y de amaño variable.nDigit[i]). } printf("Caracteres separadores: %d\n".Otro Ej. i. De este modo podemos añadir un elemento a la cabeza de la pila o extraer un elemento de la cabeza de la pila. while((c = getchar()) != EOF) if(c >= '0' && c <= '9') nDigit[c . for(i = 0. i++) printf("Dígito %d: %d\n". por ello a estas estructuras se las conoce con el nombre de LIFO (last-in. first-out. i < ND. .h> #define ND 10 int main() { int c. Programa que cuenta cuántas veces se repite cada dígito. Debido a que las operaciones de extracción e inserción se realizan por el mismo extremo. la interrogación de la misma para determinar si contiene o no algún elemento y la destrucción de la pila. */ #include <stdio. /* Utilización de arreglos. else nOther++. i < ND. y otros caracteres. printf("Otros caracteres: %d\n". Sólo es posible un modo de acceso a esta estructura: a través de la cabeza de la pila.

TPila CrearPila(). struct TNodo { TCadena val. typedef struct TNodo *TPila. typedef enum { NoError. } Otro Ej: public class Pila { NodoPila _ultimo. //Crea una pila public Pila() { _ultimo = null. _ultimo = nuevo.Para implementar una pila como una estructura dinámica de datos se usa una lista enlazada. TError &error). ErrorPilaLLena. nuevo = new NodoPila(o. las operaciones de extracción e inserción en la lista (pila) se hacen siempre sobre la cabeza de la misma. _ultimo). . } //Mete un objeto en la pila public void push(Object o) { NodoPila nuevo. if (_ultimo != null) { resultado = _ultimo. void DestruirPila(TPila &p). TPila sig. void SacarPila(TPila &p.h" namespace MPila { using namespace MCadena. TCadena x. bool PilaVacia(TPila p). } imo objeto de la pila public Object pop() { Object resultado. bool PilaLlena(TPila p). }. void MeterPila(TPila &p. _ultimo = _ultimo. resultado = null. ErrorPilaVacia} TError.obtenerAnterior().obtenerContenido(). Ej: #ifndef _MPila_h_ #define _MPila_h_ #include "MCadena. TError &error). TCadena &x.

.. y si llega una nueva persona con intención de usar el autobús. que dispone de dos extremos comienzo y fin. es decir. Esa referencia al primer nodo es muy importante ya que mediante ella podemos acceder a toda la lista. tendrá que colocarse al final y esperar que todos los elementos situados antes que él abandonen la cola.} return resultado. 4. NodoPila anterior) { _contenido = contenido. } public NodoPila obtenerAnterior() { return _anterior.COLAS Una COLA es una estructura de datos. ese nodo deberá poder ser referenciado directamente en cualquier momento (normalmente con una variable de tipo puntero). caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. La cola para subir al autobús está compuesta de elementos (personas). y el último no apunta a nada.. el puntero del nodo siguiente del último nodo toma el valor nulo (NULL). debido a que el primer elemento en entrar será también el primero en salir. En las listas abiertas existe un nodo especial: el primero. También se le llama estructura FIFO (del inglés First In First Out). 3.LISTAS ENLAZADAS La forma más simple de estructura dinámica es la lista enlazada (lista abierta o lista ligada). NodoPila _anterior. public NodoPila(Object contenido. } //esto es una clase interna class NodoPila { Object _contenido. En esta forma los nodos se organizan de modo que cada uno apunta al siguiente. Por el comienzo se extraerá un elemento cuando haya comprado el billete para su viaje. El tipo cola representa la idea que tenemos de cola en la vida real. _anterior = anterior.

/*declaración de la referencia (puntero) al primer nodo de la lista*/ struct nodo *primero.Lista ligada con tres valores enteros Mediante asignación dinámica de memoria podemos hacer que la lista varíe de tamaño. Lista doblemente enlazada: Los nodos. será imposible acceder al primer nodo y por tanto al resto de la lista y no se podrá liberar el espacio de memoria que ocupa. o cuando se borran todos los nodos de los que dispone. struct nodo *siguiente.. Lista circular: El último nodo apunta al primero. ya que sino existe ninguna copia de ese valor. Es muy importante que nuestro programa nunca pierda el valor de la referencia al primer elemento. y se pierde. aumentando o disminuyendo. }. Ej: /*declaración de la estructura nodo de la lista*/ struct nodo { int dato. Inicialmente. tiene un nodo llamado anterior el cual apunta al anterior nodo. en ese caso la referencia al primer nodo tendrá un valor nulo (puntero a NULL). TIPOS DE LISTAS Lista lineal: En la cual el último nodo apunta a NULL. diremos que la lista esta vacía. .. aparte de tener un nodo siguiente. cuando una lista aún no dispone de ningún nodo. según las necesidades del programa que la utilice con la única restricción de que haya memoria disponible. .