You are on page 1of 28

1) TEORIA DE PILAS Y COLAS:

-DEFINICION DE PILAS: Una pila es una estructura de datos de acceso restrictivo a sus elementos. Se puede entender como una pila de libros que se amontonan de abajo hacia arriba. En principio no hay libros; despus ponemos uno, y otro encima de ste, y as sucesivamente. Posteriormente los solemos retirar empezando desde la cima de la pila de libros, es decir, desde el ltimo que pusimos, y terminaramos por retirar el primero que pusimos, posiblemente ya cubierto de polvo. Es una estructura de tipo LIFO (Last In First Out), es decir, ltimo en entrar, primero en salir. -OTRA DEFINICION: Una pila es una lista en que tanto las inserciones como las supresiones se hacen por el mismo extremo, que se conoce como el tope de la pila. EJEMPLO:

-DEFINICION DE COLAS: Una cola es una estructura de datos de acceso restrictivo a sus elementos. Un ejemplo sencillo es la cola del cine o del autobs, el primero que llegue ser el primero en entrar, y afortunadamente en un sistema informtico no se cuela nadie salvo que el programador lo diga. Es una estructura de tipo FIFO (First In First Out), es decir: primero en entrar, primero en salir.

-OTRA DEFINICION: Es una lista de proceso restringido en la cual las inserciones se hacen por un extremo llamado "ltimo" y las eliminaciones se hacen por el otro extremo llamado "delantero". Por ejemplo, los aviones que esperan despegar de un aeropuerto forman una cola, el que llega a la pista queda de ltimo y el que va a despegar est de delantero en la cola.

EJEMPLO:

2) FUNCIONES Y USOS DE LAS PILAS Y COLAS:


-FUNCIONES Y USOS DE LAS PILAS: A) Se emplea en compiladores y editores de texto dirigidos por la sintaxis. -Permiten comprobar fcil y eficientemente que los smbolos cuyo uso solo tiene sentido por parejas (llaves, parntesis, etc.) estn adecuadamente balanceados. B) Tambin se emplea para la evaluacin de expresiones. -Las expresiones escritas en notacin convencional (infija, 7 * 2 + 8) pueden convertirse en notacin postfija (7 2 * 8 +) mediante una pila. -Las expresiones escritas en notacin postfija pueden calcularse mediante una pila. -Una funcin muy importante de las pilas es la implementacin en el cdigo compilado de las llamadas a funcin realizadas en el cdigo fuente. -Tambin se emplean para transformar un algoritmo recursivo en otro iterativo equivalente. -FUNCIONES Y USOS DE LAS COLAS: A) Se emplea en las operaciones sobre las estructuras de datos de otros TADs por ejemplo: -Recorrido por niveles de los nodo de un rbol.

-Recorrido primero en anchura de los nodos de un grafo. -Obtencin de un orden topolgico de los nodos de un grafo aciclico. B) Algunos servicios de un sistema operativo tambin se basan en el TAD cola por ejemplo: -Servicio de Impresin: Los documentos enviados a una impresora se sitan en una cola de impresin hasta que pueden ser impresos. Las peticiones de impresin se gestionan casi como una cola (orden de llegada, salvo cancelaciones.) -Planificador: Diferentes estrategias de planificacin de procesos (round robin, prioridades, etc.) emplean colas para los procesos que se van a ejecutar y determinar en que orden. -Tambin se emplean en algoritmos de simulacin para problemas de teoras de colas.

3) OPERACIONES DE LAS PILAS Y DE LAS COLAS:


-OPERACIONES DE LAS PILAS: Operaciones bsicas con pilas: Las pilas tienen un conjunto de operaciones muy limitado, slo permiten las operaciones de "push" y "pop": -Push: Aadir un elemento al final de la pila. -Pop: Leer y eliminar un elemento del final de la pila. -Push, insertar elemento: Las operaciones con pilas son muy simples, no hay casos especiales, salvo que la pila est vaca.

-Push en una pila vaca: Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a l, adems el puntero a la pila valdr NULL:

El proceso es muy simple, bastar con que: 1. nodo->siguiente apunte a NULL. 2. Pilaa apunte a nodo. Push en una pila no vaca: Podemos considerar el caso anterior como un caso particular de ste, la nica diferencia es que podemos y debemos trabajar con una pila vaca como con una pila normal. De nuevo partiremos de un nodo a insertar, con un puntero que apunte a l, y de una pila, en este caso no vaca:

El proceso sigue siendo muy sencillo: 1. Hacemos que nodo->siguiente apunte a Pila. 2. Hacemos que Pila apunte a nodo.

-Pop, leer y eliminar un elemento: Ahora slo existe un caso posible, ya que slo podemos leer desde un extremo de la pila.

Partiremos de una pila con uno o ms nodos, y usaremos un puntero auxiliar, nodo:

1. Hacemos que nodo apunte al primer elemento de la pila, es decir a Pila. 2. Asignamos a Pila la direccin del segundo nodo de la pila: Pila->siguiente. 3. Guardamos el contenido del nodo para devolverlo como retorno, recuerda que la operacin pop equivale a leer y borrar. 4. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.

Si la pila slo tiene un nodo, el proceso sigue siendo vlido, ya que el valor de Pila->siguiente es NULL, y despus de eliminar el ltimo nodo la pila quedar vaca, y el valor de Pila ser NULL. -OPERACIONES DE LAS COLAS: -Operaciones bsicas con colas: De nuevo nos encontramos ante una estructura con muy pocas operaciones disponibles. Las colas slo permiten aadir y leer elementos:

Aadir: Inserta un elemento al final de la cola. Leer: Lee y elimina un elemento del principio de la cola.

- Aadir un elemento: Las operaciones con colas son muy sencillas, prcticamente no hay casos especiales, salvo que la cola est vaca.

-Aadir elemento en una cola vaca: Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a l, adems los punteros que definen la cola, primero y ultimo que valdrn NULL:

El proceso es muy simple, bastar con que: 1. nodo->siguiente apunte a NULL. 2. Y que los punteros primero y ltimo apunten a nodo.

Aadir elemento en una cola no vaca: De nuevo partiremos de un nodo a insertar, con un puntero que apunte a l, y de una cola, en este caso, al no estar vaca, los punteros primero y ltimo no sern nulos:

El proceso sigue siendo muy sencillo: 1. Hacemos que nodo->siguiente apunte a NULL. 2. Despus que ultimo->siguiente apunte a nodo. 3. Y actualizamos ltimo, haciendo que apunte a nodo.

Aadir elemento en una cola, caso general: Para generalizar el caso anterior, slo necesitamos aadir una operacin: 1. 2. 3. 4. Hacemos que nodo->siguiente apunte a NULL. Si ultimo no es NULL, hacemos que ultimo->siguiente apunte a nodo. Y actualizamos ltimo, haciendo que apunte a nodo. Si primero es NULL, significa que la cola estaba vaca, as que haremos que primero apunte tambin a nodo.

-Leer un elemento de una cola, implica eliminarlo: Ahora tambin existen dos casos, que la cola tenga un solo elemento o que tenga ms de uno. -Leer un elemento en una cola con ms de un elemento: Usaremos un puntero a un nodo auxiliar:

1. Hacemos que nodo apunte al primer elemento de la cola, es decir a primero. 2. Asignamos a primero la direccin del segundo nodo de la pila: primero>siguiente. 3. Guardamos el contenido del nodo para devolverlo como retorno, recuerda que la operacin de lectura en colas implican tambin borrar. 4. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.

Leer un elemento en una cola con un solo elemento: Tambin necesitamos un puntero a un nodo auxiliar:

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

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

4) IMPORTANCIAS DE LAS PILAS Y DE LAS COLAS:


-IMPORTANCIA DE LAS PILAS: En los programas estas estructuras suelen ser fundamentales. La recursividad se simula en un computador con la ayuda de una pila. Asimismo muchos algoritmos emplean las pilas como estructura de datos fundamental, por ejemplo para mantener una lista de tareas pendientes que se van acumulando.

Las pilas ofrecen dos operaciones fundamentales, que son apilar y desapilar sobre la cima. El uso que se les de a las pilas es independiente de su implementacin interna. Es decir, se hace un encapsulamiento. Por eso se considera a la pila como un tipo abstracto de datos. -IMPORTANCIA DE LAS COLAS: Las colas sern de ayuda fundamental para ciertos recorridos de rboles y grafos. Las colas ofrecen dos operaciones fundamentales, que son encolar (al final de la cola) y desencolar (del comienzo de la cola). Al igual que con las pilas, la implementacin de las colas suele encapsularse, es decir, basta con conocer las operaciones de manipulacin de la cola para poder usarla, olvidando su implementacin interna.

5) MOVIMIENTOS DE LAS PILAS Y DE LAS COLAS:


-MOVIMIENTOS DE LAS PILAS: Manejo de saturacin por desplazamiento. Se sabe que en la pila IP se present una condicin de saturacin. Para esto se requiere inicialmente conocer si hay un nodo disponible en una pila. Si lo hay se hace el desplazamiento y se deja el nodo para que se pueda hacer la insercin en la pila NP. Se debe observar, que la pila, la pila K, que va a proveer el nodo puede estar antes o despus de la pila IP.

Figura 4.7 Saturacin en la pila J. Se encontr espacio en la pila K. En este caso J > K. Algoritmo de desplazamiento. Este algoritmo busca una posicin disponible, a partir de la primera pila, en cual de ellas hay nodo vaco. En caso de encontrar espacio antes de la pila IP (IP > K), llama a la rutina ATRAS; si, por el contrario, el espacio se encuentra delante de la pila IP (IP < K), se llama a la rutina ADELANTE. K es la variable que denota la pila donde hay espacio.

Precondicin: 1 IP NP Poscondicin: I es VERDADERO, si se puede asignar una posicin a la pila IP, para hacer la insercin. I es FALSO, toda el rea esta ocupada, hay condicin de saturacin. SATURACION(IP,I) Comience K <= 1 SW<= 0 Mientras ((NP > K),^,(SW=0)) Ejecute Si (TOPE[K] < BASE[K+1]) Entonces Si (K > IP) Entonces Llame ADELANTE(IP,K) Sino Llame ATRAS(IP,K) Fin-Si SW <= 1 Sino K <= K+1 Fin-Si Fin-Mientras Si (SW=0) Entonces I <= F Sino I <= V Fin-Si Termine

Figura 4.8 Cuando IP < K, los datos se mueven hacia adelante comenzando con el nodo de direccin ms alta LS, hasta el de ms baja LI.

Precondicin: IP < K Poscondicin: Se han movido todos los datos, entre las pilas K y IP+1, para dejar una posicin adicional, a la pila IP. RUTINA ADELANTE(IP,K) Comience LS <= TOPE[K] LI <= BASE[IP+1] +1 L <= LS Mientras (L LI) Ejecute PILA[L+1] <= PILA[L] L <= L - 1 Fin-Mientras J <= IP +1 Mientras (J K) Ejecute BASE[J] <= BASE[J] + 1 TOPE[J] <= TOPE[J] +1 J <= J+1 Fin-Mientras Retorne

Figura 4.9 Se mueven los datos hacia atrs comenzando con LI hasta LS. RUTINA ATRAS (J, K)

Precondicin: K<IP NP Poscondicin: Se han movido todos los datos, entre las pilas K +1 e IP, para dejar una posicin adicional, a la pila IP. Comience LI <= TOPE[IP] LS <= BASE[K+1] L <= LS Mientras (L LI) Ejecute PILA[L-1] <= PILA[L] L <= L + 1 Fin-Mientras J <= K+1 Mientras (J IP) Ejecute BASE[J] <= BASE[J] - 1 TOPE[J] <= TOPE[J] -1 J <= J+1 Fin-Mientras Retorne

La desventaja del desplazamiento para el manejo de la condicin de saturacin, es que solo provee un nodo para la pila donde se present dicha condicin. Es posible que se presenten saturaciones sucesivas sobre la misma pila, deteriorando la eficiencia del sistema. Reempaque. Cada que ocurre una saturacin se hace un reempaque del rea de memoria. Se basa en un cambio de tamao de cada pila desde el ltimo reempaque. El algoritmo utiliza un arreglo llamado TOPEAN (I), con 1 I N, que guarda la distribucin inicial de los topes. Tambin utiliza los vectores D, y NBASE ambos con dimensin NP. El vector D lleva el crecimiento de cada pila desde el ltimo reempaque, y NBASE, nueva base, es el vector que lleva las nuevas posiciones de la base despus del reempaque.

Precondicin: 1 IP NP Poscondicin: I es VERDADERO, si se puede asignar una posicin a la pila IP, para hacer la insercin. I es FALSO, toda el rea esta ocupada, hay condicin de saturacin. GUARDATOPES Comience K <= 1 Mientras (K NP) Ejecute TOPEAN[K] <= TOPE[K] K <= K+1 Fin-Mientras Termine SATURACION (IP,I) -ALGORITMO G Inicialmente detecta el incremento total de las pilas que crecieron y el crecimiento de cada pila. Luego, con base en la variable real P (0 P 1), se calculan los factores ALFA y BETA, con los cuales se asignan nuevas bases. Con la rutina REEMPAQUE se efecta el movimiento de datos.

Comience SUM <= M INC <= 0 K <= 1 Mientras (K NP) Ejecute SUM <= SUM - (TOPE[K] -BASE[K]) Si (TOPE[K] > TOPEAN[K]) Entonces D[K] <= TOPE[K] -TOPEAN[K] INC <= INC + D[K] Sino D[K] <= 0 Fin-Si K <= K+1 Fin-Mientras Si (SUM > 0) Entonces ALFA <= (P/NP) * SUM BETA <= ((1-P)/INC) * SUM K <= 2 NBASE[1] <= BASE[1] Mientras (K N) Ejecute NBASE[K] <= NBASE([K-1] + (TOPE[K-1] - BASE([K-1])+ ALFA + (BETA * D[K-1]) K <= K+1 Fin-Mientras REEMPAQUE I <= V Sino I <= F Fin-Si Retorne

ALFA es un valor entero correspondiente al truncamiento de la fraccin, es el nmero de posiciones que le corresponde a cada una de las pilas. BETA es el factor por el cual se hace el repartimiento de acuerdo al crecimiento, anterior a la condicin de saturacin, de cada pila. Quiz la parte ms interesante de este algoritmo es el proceso general de reempaque. El reempaque no es trivial puesto que ciertas partes del contenido de la memoria se desplazan hacia adelante y otras hacia atrs; es importante tener cuidado para no regrabar ninguna posicin de memoria que contenga datos mientras se est realizando una operacin de movimiento.

ALGORITMO R Comience K <= 2 Mientras (K NP) Ejecute Si ( NBASE[K] < BASE([K] ) Entonces ATRAS(K) Sino Si ( NBASE[K] > BASE([K] ) Entonces ADELANTE(K) Sino TOPEAN[K] <= TOPE[K] Fin-Si Fin-Si K <= K+1 Fin-Mientras Retorne

ALGORITMO ATRAS Comience LI <= BASE[K] + 1 LS <= TOPE[K] CAMBIO <= (BASE[K]-NBASE[K]) Mientras (LI LS) Ejecute PILA[LI-CAMBIO] <= PILA[LI] L <= L + 1 Fin-Mientras BASE[K] <= NBASE[K] TOPE[K] <= TOPE[K] - CAMBIO TOPEAN[K] <= TOPE[K] Retorne Es un poco ms difcil cuando la nueva base es mayor que la anterior.

Figura 4.10 Movimiento de datos hacia adelante. Primero se deben hacer los movimientos de ms adelante, para no daar la informacin En el caso de la figura 4.10, se observa que no se pueden mover los datos de la pila 3. Es decir, se debe continuar buscando una condicin en NBj Bj; de todas maneras siempre se cumple que NB(NP+1)=B(NP+1). Recordemos que para los diferentes procesos se cre la pila ficticia NP+1.

ALGORITMO ADELANTE Comience J <= K Mientras (BASE[J] < NBASE[J]) Ejecute J <= J +1 Fin-Mientras KN <= J -1 Mientras (KN K) Ejecute LI <= BASE[KN] + 1 LS <= TOPE[KN] CAMBIO <= NBASE[KN] - BASE[KN] Mientras (LS LI) Ejecute PILA[LS+CAMBIO] <= PILA[LS] LS <= LS + 1 Fin-Mientras BASE[KN] <= NBASE[KN] TOPE[KN] <= TOPE[KN] +CAMBIO TOPEAN[KN] <= TOPE[KN] KN <= KN -1 Fin-Mientras Retorne

-MOVIMIENTOS DE LAS COLAS: Eliminacin del


nodo delantero de la cola:

Figura 4.15 (a) Condicin inicial crtica (b) Condicin final una vez se ha eliminado el nodo delantero

ALGORITMO ELIM-COLA-CIR(DATO,I) Precondicin: Que haya cola. Poscondicin: U apunta al ltimo elemento de la cola, si hay elementos, sino, queda la cola en condicin de cola vaca. Comience I <= V PRUEBA-COLA(VACIA) Si (VACIA) Entonces I <= F Sino DATO <= COLA[D] Si (D=U) Entonces D <= 0 U <= D Sino D <= D + C Si (D = M) Entonces D <= 1 Sino Fin-Si Fin-Si Fin-Si Termine

6) VENTAJAS DE LAS PILAS:


-Puede incluir instrucciones adicionales para saltos, entrada/salida, control de la pila, parada de la maquina etc.

-su ventaja mas importante reside en que no se necesita utilizar registros o variables temporales para los valores intermedios en las expresiones. La pila acta como gestor y almacn de esos valores. -La estructura del cdigo permite que la traduccin a cdigo de pila sea prcticamente directa.

7) DESVENTAJAS DE LAS PILAS:


-su principal desventaja es que la mayora de las arquitecturas actuales utilizan registros que no estn organizados en forma de pila. -Que se pueden insertar y eliminar elementos slo por uno de los extremos -Que los elementos de una pila sern eliminados en orden inverso al que se insertaron. -Que el ltimo elemento que se meti a la pila ser el primero en salir de ella. -Se tiene la limitacin de espacio en memorias reservadas, propias de los arreglos. Luego de que el arreglo llegue a su mximo no ser posible ampliar su tamao.

8) VENTAJAS DE LAS COLAS:


-Los elementos se eliminan en el mismo orden en el que se insertaron. Por lo tanto el primer elemento en entrar a la cola ser el primero en salir. -Controlan el proceso de tareas en un sistema operativo hasta simulaciones del sistema de control areo de un aeropuerto. - Las colas aseguran un tratamiento justo de los objetos que contienen, ya que siempre se extraer el elemento que ms tiempo lleva esperando.

9) DESVENTAJAS DE LAS COLAS:


-Las colas no guardan ningn orden, como tampoco lo guardan las listas no ordenadas. -En las colas no se puede borrar un elemento cualquiera, se borra siempre el que est en la cabeza de la cola.

10) EJEMPLOS DE PILAS Y COLAS:


-EJEMPLOS DE PILAS: EJEMPLO 1: #include <stdio.h> Int main (void) { Struct tpila pila; Int elem; Crear (&pila); If (vaca (&pila)) printf ("\nPila vaca."); If (llena (&pila)) printf ("\nPila llena."); Apilar (&pila, 1); Desapilar (&pila, &elem); Return 0; } EJEMPLO 2: Int main (void) { Struct tpila *pila; Int elem; Crear (&pila); If (vaca (pila)) printf ("\nPila vaca!"); Apilar (pila, 1); Desapilar (pila, &elem); Return 0; }

-EJEMPLOS DE COLAS: EJEMPLO: #include <stdio.h> #define MAX_COLA 50 /* cola de 49 elementos */ Int main (void) { Struct tcola cola; Int elem; Crear (&cola); If (vaca (&cola)) printf ("\nCola vaca."); If (llena (&cola)) printf ("\nCola llena."); Encolar (&cola, 1); Desencolar (&cola, &elem); Return 0; }

11) SINTAXIS Y DECLARACIONES DE LAS FUNCIONES:


Las funciones, son mdulos de cdigo independientes que pueden Recibir valores de otras funciones, cuando se les haga una llamada Y pueden devolver valores a quien les ha llamado. (No es obligatorio ni que reciban ni que enven) La funcin principal es main, que es donde comienzan los programas. Su utilizacin es igual que el resto de funciones, pero con la diferencia, que al enviarle valores ser desde el sistema operativo, Y tambin los valores, los devolver al sistema operativo. Las funciones deben ser declaradas en el general, despus de los includes. La declaracin de funciones es as datos a devolver funcin (parmetros a recibir)

Si no va a devolver datos, se usa void. Lo mismo si no va a recibir parmetros.

Ejemplo: Void Funcin (void); Si queremos enviarle un entero y que devuelva un entero: Int funcin (int a); As el entero que le enviemos, se llamara a en la funcin y si esta funcin devuelve un entero, al llamarla llevara a la izquierda un igual y la variable que este a la izquierda guardara el valor devuelto. Se puede usar todo tipo de datos para enviar/recibir a/de las funciones Esa es la declaracin de funciones. Luego habrn de ser colocadas como se coloca el Main (sea con sus corchetes y escribiendo dentro el cdigo que realicen) Os quiero apuntar, que la orden para devolver valores es return. Return variable; En el main, el return, se utiliza mas que nada para saber si el programa Se ejecuto correctamente. Generalmente, un programador hace que devuelva 0 si su programa se ejecuto correctamente y otro numero si tuvo algn problema (el nmero ser identificativo del problema) Ejemplo: Return 0; Devolvera 0 en una funcin. Cdigo fuente con el ejemplo del uso de una funcin. #include <stdio.h> Int suma (int a,int b); Void main ()

Int sumando1,sumando2,resultado; Printf ("Mete el primer sumando:\n"); Scanf ("%d", &sumando1); Printf ("\nMete el segundo sumando:\n"); Scanf ("%d", &sumando2); Fflush (stdin); //borra el buffer del teclado ;) Resultado=suma (sumando1, sumando2); Printf ("\nEl resultado fue: %d", resultado); Getchar ();

} int suma (int a, int b) { Int c; c = a + b; Return c; } Como dato curioso, para enviar parmetros desde el sistema operativo (Ejemplo, cuando pones ping 127.0.0.1, la IP, es un parmetro) Debemos declarar el main de la siguiente forma: Int main (int argc, char * argv []) Argc ser el nmero total de argumentos. Argv [0] ser el nombre del exe Argv [1] el primer parmetro ect..

12) CARACTERISTICAS DE LAS FUNCIONES EN LENGUAJE C:


-Las funciones son porciones de cdigo que devuelven un valor. -Permiten descomponer el programa en mdulos que se llaman entre ellos. -En C no existe diferencia entre funciones y procedimientos: a todas las subrutinas se las llama funciones. -La definicin de una funcin especifica lo siguiente: nombre de la funcin nmero de argumentos que lleva y tipo de cada uno de ellos tipo de datos que devuelve Cuerpo de la funcin (el cdigo que ejecuta) -Las funciones son siempre globales, esto es, no se permite declarar una funcin dentro de otra. -Las funciones son visibles slo despus de que se han declarado. -Se pueden declarar funciones, especificando slo su formato, pero no su cuerpo: Int suma (int a, int b); Lo anterior es una declaracin de la funcin suma, que queda disponible para su uso, a pesar de no haber sido definido su cuerpo. La declaracin de una funcin de esta forma se llama prototipo. Es buena prctica declarar al comienzo del programa los prototipos de las funciones que vamos a definir, incluyendo comentarios sobre su finalidad.

INTEGRANTES: 1)Aizpurua Christian 2)Infante Leidimar 3)Leon miriannis 4)luz karina 5) 6)

CIUDAD BOLIVAR MAYO DEL 2005

INTRODUCCION:
El lenguaje C naci en los Laboratorios Bell de AT&T y ha sido estrechamente asociado con el sistema operativo UNIX, ya que su desarrollo se realiz en este sistema y debido a que tanto UNIX como el propio compilador C y la casi totalidad de los programas y herramientas de UNIX, fueron escritos en C. Su eficiencia y claridad han hecho que el lenguaje ensamblador apenas haya sido utilizado en UNIX. En 1972, Dennis Ritchie, toma el relevo y modifica el lenguaje B, creando el lenguaje C y reescribiendo el UNIX en dicho lenguaje. La novedad que proporcion el lenguaje C sobre el B fue el diseo de tipos y estructuras de datos. Los tipos bsicos de datos eran "CHAR" (carcter), "INT" (enteros), "FLOAT" (Reales en simple presicin), y "DOUBLE" (Reales en doble Presicin). Posteriormente se aadieron los tipos "SHORT" (Enteros de longitud<=longitud de un int), "LONG" (Enteros de longitud >= longitud de un entero), "UNSIGNED" (Enteros sin signo), y "ENUMERACIONES". Los tipos estructurados bsicos de C son las estructuras, las uniones, y los arrays. Estos permiten la definicin y declaracin de tipos de mayor complejidad. Las instrucciones de control de flujo de C son las habituales de la programacin estructurada: IF, FOR, WHILE, SWITCH - CASE, todas incluidas en su predecesorBCPL. C incluye tambin punteros y funciones. Los argumentos de las funciones se pasan por valor, esto es copiando su valor, lo cual hace que no se modifiquen los valores de los argumentos en la llamada. Cuando se desea modificar los argumentos en la llamada, stos se pasan por referencia, es decir, se pasan las direcciones de los argumentos. Por otra parte, cualquier funcin puede ser llamada recursivamente. Este trabajo se centra particularmente en las funciones, pilas y colas todas estas estructuras del lenguaje. Las pilas son una estructura lineal donde las adiciones y eliminaciones se hacen por un extremo Tambin se la conoce con el nombre de estructura LIFO ---->Last Input Output (ultimo en entrar primero en salir), las operaciones bsicas que se pueden realizar con las pilas son: creacin, adicin, eliminacin y listado. Las colas son una estructura de datos que consiste en realizar las inserciones por extremo y las eliminaciones por otro. Las colas tambin se llaman FIFO (primero entrar, primero en salir).

CONCLUSION:
Finalmente, C, que ha sido pensado para ser altamente transportable y para programar lo improgramable, igual que otros lenguajes tiene sus inconvenientes. Carece de instrucciones de entrada/salida, de instrucciones para manejo de cadenas de caracteres, con lo que este trabajo queda para la librera de rutinas, con la consiguiente prdida de transportabilidad. La excesiva libertad en la escritura de los programas puede llevar a errores en la programacin que, por ser correctos sintcticamente no se detectan a simple vista. Por otra parte las precedencias de los operadores convierten a veces las expresiones en pequeos rompecabezas. A pesar de todo, C ha demostrado ser un lenguaje extremadamente eficaz y expresivo. En cierto modo y en la bsqueda de la verdad, de la lgica y de la razn hemos analizado profundamente los aspectos tcnicos acerca de las diferentes estructuras dinmicas y no dinmicas que se encuentran en el lenguaje, centrndonos especialmente y con particular nfasis en las funciones todas ellas muy importantes para la programacin estructurada, las colas ,las pilas herramientas indispensables para el ahorro del tiempo a nosotros los programadores solo la tecnologa futura y los nuevos avances tecnolgicos nos darn la luz y nos ensearan el camino por el cual debe pasar la humanidad llevada de la mano por la informatica.

BIBLIOGRAFIA:
Estructuras dinmicas de datos. Algoritmos, acceso, propiedades, ejemplos. Direccin Pgina Web: http://c.conclase.net/edd/index.php?cap=000 INSTITUTO TECNOLOGICO de La Paz. Tutorial de Estructura de Datos. Direccin Pgina Web: http://www.itlp.edu.mx/publica/tutoriales/estru1/ ALGORITMIA ALGO+ - Algoritmos y Estructuras de Datos. Direccin Pgina Web: http://www.algoritmia.net/articles.php?id=13 100cia.com > Portada > Enciclopedia > Estructura_de_datos. Direccin Pgina Web: http://www.100cia.com/enciclopedia/Estructura_de_datos El Rincn del Programador. Programacin Genrica. Estructura de Datos. Listas. Direccin Pgina Web: http://rinconprog.metropoliglobal.com/CursosProg/ProgGen/Estr_Datos/index.php? cap=4