Está en la página 1de 34

UNIVERSIDAD DE GUADALAJARA

CENTRO UNIVERSITARIO DE LA COSTA

LICENCIATURA EN INGENIERIA EN COMPUTACIÓN

UNIDAD DE APRENDIZAJE: PROGRAMACIÓN

RESUMEN

CODIGO: 216706604

Alumno:

BIANCA PATRICIA GUADALUPE CAMACHO CRUZ

Puerto Vallarta, Jalisco, abril 30 del 2020



Índice:
 Lenguaje de Programación C
 Estructura General de un Programa
 Cómo insertar comentarios
 Palabras reservadas
 Identificadores
 Tipos de Datos en Lenguaje C
 Calificadores de Datos
 Variables - Declaración y ejemplos
 Constantes - Directiva #define
 Secuencias de escape
 Inclusión de archivos #include
 Operadores Aritméticos básicos
 Funciones printf() y scanf()
 Operadores relacionales <, >, ==
 Condicionales if, elseif y switch
 Operadores lógicos AND, OR, Not
 Bucles While, Do While y For
 Variables Locales y Globales en C
 Funciones
 Recursividad
 Arrays
 Matrices
 Algoritmos de ordenación y búsqueda
 Estructuras y uniones
 Punteros (Apuntadores)
 Asignación dinámica de memoria
 Cadenas
 Entrada y salida de archivos
 Organización de datos en un archivo
 Tipos de datos TAD/objetos
 Listas enlazadas
 Pilas y colas
Lenguaje de Programación C

Propósito general asociado de modo universal, al sistema operativo UNIX. Sin embargo, la
popularidad, eficacia y potencia de c, se ha producido porque este lenguaje no está
prácticamente asociado a ningún sistema operativo, ni a ninguna máquina, en especial. Esta
es la razón fundamental por la cual c, es conocido como el lenguaje de programación de
sistemas, por excelencia.

El lenguaje c es flexible, con órdenes, operaciones y funciones de biblioteca que se pueden


utilizar para escribir la mayoría de los programas que corren en la computadora.

C se utiliza por programadores profesionales para desarrollar software en la mayoría de los


modernos sistemas de computadora.

Se pude utilizar para desarrollar sistemas operativos, compiladores, sistemas de tiempo real
y aplicaciones de comunicaciones.

Puede ser escrito para un tipo de computadora y trasladarse a otra computadora con pocas o
ninguna modificación.
Estructura General de un Programa C y Cómo Insertar Comentarios

Para insertar comentarios solo se necesitan estas dos diagonales “//” cabe mencionar que no
se va imprimir en el programa.

Otra forma más práctica que se utiliza para insertar muchos comentarios es el “/*” este nos
evita estar insertando en cada comentario las diagonales. Se pone en el principal comentario
y se cierra en el último.
Palabras reservadas:
Estas palabras sirven para indicar al computador que realice una tarea muy determinada
(desde evaluar una comparación, hasta definir el tipo de una variable) y tienen un especial
significado para el compilador.

Identi fi cadores para variables:


Un identificador es el nombre que se le asigna a una constante, variable, función o
argumento.

Existen dos tipos de identificadores; predefinidos (que forman parte del lenguaje c) y
definidos (que son por parte del programador).

Existen ciertas reglas para el uso de identificadores tales son:

1.- Solo se puede utilizar_ a.z A.Z 0.9

2.- No pueden contener espacios, Ñn ni acentos

3.- No se pueden comenzar con números

4.- No se pueden usar palabras reservadas como identificador

5.- No puede haber 2 identificadores en el mismo nombre


Tipos de Datos:

Tipos de
 Descripción  Memoria 
Datos 

2 bytes o una palabra


int Cantidad entera
(varía según compilador).

char Carácter 1 byte.

float Almacena valores reales en punto flotantes. 1 palabra (4 bytes).

double Almacena valores reales en doble precisión. 2 palabras (8 bytes).

Se utiliza para definir una función que no


void devuelve ningún valor o declarar punteros
genéricos (lo veremos más tarde).

 El tipo de la variable nos indica el conjunto de valores que puede tomar y las
operaciones que pueden realizarse con ella. Existen cinco tipos de datos básicos en C:

Califi cadores de Datos:

Signed Número con signo


Unsigned Número natural (sin signo)
Short Rango en formato corto
Long Rango en formato largo

Es posible combinar califacores entre si.

Signed long int = long int = long

unsigned long int = unsigned long 4 bytes 0 a 4.294.967.295 (El mayor entero permitido en
'C')
Variables:

Una variable es una zona de memoria en la que el compilador puede almacenar datos. El
tamaño de esta zona de memoria viene determinado por el tipo del que declaramos la
variable.

Al declarar una variable lo que hacemos es dar orden al compilador para que reserve una
zona de memoria del tamaño adecuado (según el tipo), dando un nombre en dicha zona.

[calificador] <tipo> <nombre> ;

Opcional

Obligatorio Obligatorio, será el


identificador de la
Indica al compilador que
variable
la línea de código ha
terminado
Una variable declarada a la que no se le ha dado valor tiene un contenido indefinido.

Para colocar un valor en una variable hay que asignarlo:

Int iEdad; /*Reserva la memoria*/

iEdad=19; /*le asigna un valor*/

Es posible inicializarlo y declarar más de una variable del mismo tipo en la misma sentencia:

[calif] <tipo> <nombre>=<valor>, <nombre2>=<valor>;

Las variables pueden ser de dos tipos según el lugar donde se declaren: globales o locales.

Los globales se declaran fuera de las funciones. Pueden ser utilizadas en cualquier parte del
programa, desde su declaración y hasta el final de éste.

Las locales se declaran dentro de una función (se declaran antes de la primea instrucción del
bloque en que son declaradas {}).

Constantes directi va #defi ne:

Una constante es un valor que no puede ser alterado/modificado durante la ejecución de un


programa, únicamente puede ser leído.

Un ejemplo seria; PI=3.1416 (Lo podemos declarar como una constante y durante el
programa no se va modificar ya que está definido)

Las constantes definidas con #define se denominan constantes simbólicas, y algunas de ellas
existen de forma predeterminada en el lenguaje.

Otro uso de #define es el de definir macros, equivalencias a ejecutar cuando se encuentre la


invocación a la macro. Por ejemplo:
Secuencias de escape:

Las más comunes son:

Ejemplo:

Inclusión de archivos de cabecera - Directi va #include:


La directiva #include, permite leer el teclado, escribir en la pantalla, manejar números,
realizar funciones matemáticas, añadir librerías o funciones que se encuentran en otros
ficheros a nuestro programa.

Para indicar al compilador que vamos a incluir ficheros externos podemos hacerlo de dos
maneras (siempre antes de las declaraciones).
1. Indicándole al compilador la ruta donde se encuentra el fichero.

o #include "misfunc.h"

o #include "c:\includes\misfunc.h"

2. Indicando que se encuentran en el directorio por defecto del compilador.

o #include <misfunc.h>

Operadores Aritméti cos básicos:

Son aquellos que permiten realizar cálculos con valores numéricos para obtener un
resultado. Los operadores aritméticos más habituales son la suma, resta, multiplicación y
división.

Los operadores aritméticos básicos en C son:

C no reconoce el operador ^ para el cálculo de potencias de un número, ni el operador div o


barra invertida para la obtención del cociente o división entera de una división.

Ejemplo:
Printf y Scanf:

printf() y scanf() son funciones que nos permitirán imprimir datos en pantalla o por el
contrario, obtener datos a través del teclado.

La rutina printf() permite la aparición de valores numéricos, caracteres y cadenas de texto


por pantalla.

Ejemplo:

scanf:

Permite leer varios tipos de datos de una sola vez, tales como enteros, números decimales o
cadenas de caracteres.

La principal característica de la sentencia scanf es que necesita saber la posición de la


memoria del ordenador en que se encuentra la variable para poder almacenar la información
obtenida.

La forma de usar ambos comandos depende del lenguaje de programación:

printf (“Introduce la variable: ”);

scanf(variable_en_la_que_se_introduzca_en_el_teclado);
Operadores relacionales o de comparación <, >, ==, !=
Se llaman operadores relacionales o de comparación a aquellos que permiten comparar dos
valores evaluando si se relacionan cumpliendo el ser menor uno que otro, mayor uno que
otro, igual uno que otro, etc.

Operador Significado

Operador < Menor que

Operador <= Menor o igual que

Operador > Mayor que

Operador >= Mayor o igual que

Operador == Igual a

Operador != Distinto de ó no igual que

OPERADORES LÓGICOS EN C

Existen 3 operadores lógico, cuyos argumentos son expresiones relacionales, aunque


admiten cualquier tipo de operando entero:

Operador conjunción (y/and) &&


Binarios
Operador disyunción (o/or) ll

Operador negación (no/not) ! Unario

Operador Y (&&)-AND lógico (operador binario que devuelve 0 (falso) si alguno de los
operadores es falso(0), y devuelve 1 (verdadero) en caso contrario.

Operador 0 (ll)- OR lógico (operador binario que devuelve 0 si los dos operadores se evalúan
a falso, y devuelve 1 en caso contrario).

Operador (!)-NOT lógico (operador unario que devuelve 1 si el operador se evalúa a falso(0),
y devuelve 0 (falso) en caso contrario.
Ejemplo:

Suponiendo que tenemos cuatro variables A, B, C y D cuyos valores se han establecido en A =


5, B = 7, C = 2, D = 5 podríamos evaluar estas expresiones:

Expresión Pregunta equivalente Resultado Ejemplo código

printf ("Pregunta (A == B) && (A < B) vale %d\n", (A == B) && (A <


(A == B) && (A < B) ¿Es A igual a B y A menor que C? 0 (falso)
B));

¿Es A igual a 5 ó es A mayor que


(A == 5) || (A > 7) 1 (verdadero) printf ("Pregunta (A == 5) || (A > 7) vale %d\n", (A == 5) || (A > 7));
7?

! ( A == 5 ) ¿A es NO igual a 5? 0 (falso) printf ("Pregunta ! ( A == 5 ) vale %d\n", ! ( A == 5 ));

Operadores condicionales en C - if, else, elseif y switch:


La sentencia if…else permite variar el flujo de ejecución de un programa.

El flujo dependerá del valor de una expresión:

Si la expresión es cierta se ejecuta


If
una sentencia determinada.

If…else Si la expresión es cierta se ejecuta


una sentencia determinada, si es
falsa se ejecuta otra sentencia

if (condición) sentencia1;
else if (condición) sentencia2;
else if (condición) sentencia3;
else sentencia4;

Switch:
Los condicionales Switch, son una estructura de control condicional, que permite definir
múltiples casos que puede llegar a cumplir una variable cualquiera, y qué acción tomar en
cualquiera de estas situaciones, incluso es posible determinar qué acción llevar a cabo en
caso de no cumplir ninguna de las condiciones dadas.

Cada case puede incluir una o más sentencias sin necesidad de ir entre llaves, ya que se
ejecutan todas hasta que se encuentra la sentencia BREAK. La variable evaluada sólo puede
ser de tipo entero o carácter. Default ejecutará las sentencias que incluya, en caso de que la
opción escogida no exista.

Operadores lógicos y tabla de verdad - AND &&, OR ||, Not !:

Las expresiones conectadas con los operadores se evalúan de izquierda a derecha y


la evaluación se detiene cuando el resultado es verdadero o falso.

Los operadores lógicos

Los operadores lógicos son:

 && AND (el resultado es verdadero si ambas expresiones son verdaderas)


 || OR (el resultado es verdadero si alguna expresión es verdadera)
 ! NOT (el resultado invierte la condición de la expresión)
AND y OR trabajan con dos operadores y retornan un valor lógico basadas en las
denominadas tablas de verdad. El operador NOT actúa sobre un operando. 

El operador lógico AND El operador lógico OR

x y resultado x y resultado
true true true true true true
true false false true false true
false true false false true true
false false false false false false

El operador lógico NOT

x resultado
true false
false true

Ciclos While, Do While y For:

Son estructuras de repetición que permiten realizar tareas recurrentes y se usan para el
control de flujo de un proceso un número determinado de veces.

Bucle While

Su sintaxis es:
while (condición) sentencia;

Con esta sentencia se controla la condición antes de entrar en el bucle. Si ésta no se cumple,
el programa no entrará en el bucle.

Naturalmente, si en el interior del bucle hay más de una sentencia, éstas deberán ir entre
llaves para que se ejecuten como un bloque.

Do While:

Ejecuta una sentencia repetidamente, hasta que el valor de expresión sea falso. La


comprobación se realiza después de cada iteración.

La única diferencia entre las sentencias while y do...while es que con la segunda el cuerpo del
bucle se ejecutará por lo menos una vez.
 Bucle For:

1) Se evalúa la expresión de inicialización.


 
2) Se evalúa la condición. Si el resultado es falso, termina la ejecución de la
estructura for. Si es verdadero, sigue por el paso 3.
  
3) Se ejecuta el bloque de instrucciones dentro de la estructura.
4) Se evalúa la expresión final, que normalmente altera la variable de control, y se
vuelve al paso segundo.

Su sintaxis es:

for (inicialización;condición;incremento) {
sentencia1;
sentencia2;
}

La inicialización indica una variable (variable de control) que condiciona la repetición del
bucle. Si hay más, van separadas por comas:

for(a=1,b=100;a!=b;a++,b- -){ ... }


Sentencia Break

Esta sentencia se utiliza para terminar la ejecución de un bucle o salir de una sentencia
SWITCH.

Sentencia Continue

La sentencia continue provoca un salto hasta el final del cuerpo del bucle (puede que sólo
aparezca dentro del cuerpo del bucle de los bucles for, while, y do-while).

Variables Locales y Globales:

Los globales se declaran fuera de las funciones. Pueden ser utilizadas en cualquier
parte del programa, desde su declaración y hasta el final de éste.

Las locales se declaran dentro de una función (se declaran antes de la primea
instrucción del bloque en que son declaradas {}).
Funciones:

Sintaxis de una función:

TIPO FUNCIÓN:

Puede ser de cualquier tipo de los que conocemos. El valor devuelto por la función será de
este tipo. Por defecto, es decir, si no indicamos el tipo, la función devolverá un valor de tipo
entero ( int ). Si no queremos que retorne ningún valor deberemos indicar el tipo vacío
( void ).

La declaración da a conocer la función al compilador, de forma que a partir del punto de


declaración, ya se pueden realizar invocaciones a la misma.

Los prototipos de las funciones pueden escribirse antes de la función main o bién en otro
fichero. En este último caso se lo indicaremos al compilador mediante la directiva #include.
Arrays, arreglos, cadenas o vectores:

Los arrays son variables estructuradas como cadena de caracteres, donde cada elemento se
almacena de forma consecutiva en un número de notaciones.

Tamaño: tamaño indica el número de elementos del vector (se debe indicar entre
corchetes [ ] ).

For: el primer for sirve para rellenar el vector y el segundo para visualizarlo. Las posiciones
van de 0 a 9 ( total 10 elementos).
Cadenas de caracteres: es un conjunto de caracteres valores de tipo “char”,
terminados en carácter nulo. Internamente se almacena en posiciones consecutivas de
memoria. Se declara;

char nombre[n]; donde: n >= 1 y representa a la longitud-1 real de la cadena.

Nota: Al declarar una cadena deberemos reservar una posición más que la longitud
que queremos que tenga dicha cadena

Matrices- Bidimensional, tridimensional:


Declaración de matriz multidimensional:

tipo nombre [tamaño 1][tamaño 2]...;

Matriz tridimensional: se utiliza, por ejemplo, para trabajos gráficos con objetos 3D.
La siguiente declaración crea una matriz de enteros tridimensional (5 x 10 x 4):

int arr[5][10][4];

Arrays bidimensionales

Una matriz bidimensional es, en esencia, una lista de matrices unidimensionales. Para
declarar una matriz entera bidimensional de dimensiones mxn, podemos escribir de la
siguiente manera:

type arrayName[m][n];

Donde type puede ser cualquier tipo de datos de C válido ( int , float , etc.) y
arrayName puede ser cualquier identificador de C válido. Una matriz bidimensional se puede
visualizar como una tabla con m filas n columnas. El orden sí importa en C. Una matriz
bidimensional a, que contiene tres filas y cuatro columnas se puede mostrar de la siguiente
manera:
Por lo tanto, cada elemento de la matriz a se identifica por un nombre de elemento
de la forma a[i] [j] , donde a es el nombre de la matriz, i representa qué fila y j representa qué
columna.

Punteros:

Un puntero es una variable que contiene la dirección de memoria de otra variable. Se usan
para pasar información entre una función y puntos de llamada.

Su sintaxis es la siguiente:

tipo *nombre;

Donde nombre es el nombre de la variable, y tipo es el tipo del elemento cuya dirección
almacena el puntero.

Existen dos operadores especiales para trabajar con punteros: & y *.

El primero devuelve la dirección de memoria de su operando. El segundo devuelve el valor de


la variable cuya dirección es contenida por el puntero

Asignación

Los punteros se asignan igual que el resto de las variables. Es posible desplazar un puntero
recorriendo posiciones de memoria. Para ello podemos usar los operadores de suma, resta,
incremento y decremento (+, -, ++, - -).

Estructuras y Uniones
El formato general de una declaración struct es:

struct [nombre_estructura] {

campo_1;

campo_2;

} [variable_estructura];
El formato general de una declaración union es:

union [nombre_union] {

campo_1;

campo_2;

} [variable_union];

La diferencia entre una variable tipo union y un registro struct es que la primera implica que
todos los campos ocupan la misma posición de memoria (que será del tamaño del mayor de
ellos). Se utiliza cuando se quiere que una misma variable pueda contener datos de distinto
tipo, o cuando se quiere utilizar una misma variable desde distintos puntos de vista.

Typedef

Es posible agrupar un conjunto de elementos de tipo estructura en un array. Esto se conoce


como array de estructuras: El lenguaje 'C' dispone de una declaración llamada typedef que
permite la creación de nuevos tipos de datos. Ejemplos:

typedef int entero; /* */


entero a, b=3; /* declaramos dos variables de este tipo */

:
Ficheros - Abrir, cerrar, leer y agregar archivos de texto:

Antes de abrir un fichero se declara un puntero de tipo FILE, para abrir el fichero utilizaremos
la función fopen( ).

Su sintaxis es:

FILE *puntero;
puntero = fopen ( nombre del fichero, "modo de apertura" );

Donde puntero es la variable de tipo FILE.

Nota: si vamos a trabajar con


archivos binarios usamos la
letra b así que los modos de acceso
quedan “rb”, “wb”, “ab”, “rb+”,
“wb+”, “ab+”.

Para cerrar los ficheros utilizaremos la función fclose( ); Esta función cierra el fichero, cuyo
puntero le indicamos como parámetro. Si el fichero se cierra con éxito devuelve 0.

Leer del archivo de texto

 fgetc() permite leer un carácter desde el archivo, recibe un parámetro y es la variable


del archivo. Devuelve el carácter leído.

 fgets() lee cadenas completas desde el archivo, hasta que encuentra un retorno de


carro \n o un eof. Acepta tres parámetros el nombre del arreglo de caracteres donde se
va a guardar lo leído, cantidad de bytes a leer y variable de archivo.
 fscanf() funciona de la misma forma que un scanf() tradicional pero con un parámetro
al principio que indica el archivo a leer.

Para escribir en archivos binarios

 fwrite() se usa para escribir datos binarios en un archivo, recibe tres parámetros, el
primero es la variable a guardar, el segundo el tamaño de la variable a guardar, el tercero
cuantas veces se va a guardar y por último la variable de archivo.

Para leer de un archivo binario

 fread() se usa para leer datos binarios de un archivo, recibe tres parámetros, el
primero es la variable donde se van a guardar los datos, el segundo el tamaño de la
variable a leer, el tercero cuantas veces se va a leer y por último la variable de archivo.

Asignación dinámica de memoria Malloc. Pilas, colas y listas:

Malloc: reserva en memoria una zona de tamaño bytes, y devuelve un puntero al inicio de
esa zona.

free( puntero );

Esta función libera de la memoria la zona que habíamos reservado anteriormente con la
función malloc.

Estructuras dinámicas de datos:

 Pilas

 Colas

 Listas
Pilas

Este tipo de estructuras se caracteriza porque todas las operaciones se realizan en el mismo
lado.

Hay funciones de gestión de memoria dinámica (stdlib.h):

– void *malloc(size_t): Reserva memoria dinámica.

– void *calloc(size_t): Reserva memoria dinámica.

– void *realloc(void *,size_t): Ajusta el espacio de memoria dinámica.

– free(void *): Libera memoria dinámica.

Colas

Se caracteriza porque insertamos los elementos por un lado y los extraemos por el otro lado.
El primer elemento en entrar es el primero en salir. Para gestionar la cola utilizaremos 3
punteros (para la pila solo eran necesarios 2).

La estructura:

struct cola { tipo variables; struct cola *sig; } *CAB=NULL,*AUX=NULL,*FIN=NULL;


Listas

Este tipo de estructuras se caracteriza porque los elementos están enlazados entre sí, de
manera que además de las acciones habituales de insertar, extraer y visualizar también
podremos buscar un elemento.

struct lista
{
tipo variables;
struct lista *sig;
}*CAB=NULL,*AUX=NULL,*F=NULL,*P=NULL;

Recursividad:

Se llama recursividad a un proceso mediante el que una función se llama a sí misma de forma
repetida, hasta que se satisface alguna determinada condición

Se deben satisfacer dos condiciones para que se pueda resolver un problema


recursivamente:

Primera: El problema se debe escribir en forma recursiva.

Segunda: La sentencia del problema debe incluir una condición de fin.


Algoritmos de ordenación y búsqueda:
Búsqueda lineal – Búsqueda Binaria.

Búsqueda Lineal: compara los elementos del array con la clave de búsqueda hasta que
encuentra el elemento o bien hasta que se determina que no se encuentra.

La Búsqueda Binaria: compara si el valor buscado está en la mitad superior o inferior.

Ordenamiento Burbuja: funciona revisando cada elemento de la lista que va a ser ordenada
con el siguiente, intercambiándolos de posición si están en el orden equivocado.

Ordenamiento por inserción:

Consiste en ir insertando un elemento de la lista ó un arreglo en la parte ordenada de la


misma, asumiendo que el primer elemento es la parte ordenada, el algoritmo ira
comparando un elemento de la parte desordenada de la lista con los elementos de la parte
ordenada, insertando el elemento en la posición correcta dentro de la parte ordenada, y así
sucesivamente hasta obtener la lista ordenada.

Ordenamiento por Selección:

Consiste en encontrar el menor de todos los elementos del arreglo o vector e intercambiarlo
con el que está en la primera posición. Luego el segundo más pequeño, y así sucesivamente
hasta ordenarlo todo. Su implementación requiere O(n2) comparaciones e intercambios para
ordenar una secuencia de elementos.

 Buscar el mínimo elemento entre una posición i y el final de la lista

 Intercambiar el mínimo con el elemento de la posición i

Cadenas:

Funcionan igual que los demás arrays con la diferencia de que ahora se manejan


letras en vez de números. Se les llama cadenas, strings o tiras de caracteres.
Para declarar una cadena se hace como en el caso de un array. Por ejemplo, si
queremos declarar una cadena de longitud 20 caracteres se haría:

char texto[20];




Organización de datos en un archivo


Organización de Archivos La organización de un archivo define la forma en que los registros
se disponen sobre el soporte de almacenamiento, o también se define la organización como
la forma en que se estructuran los datos en un archivo. En general se consideran tres
organizaciones fundamentales:

– Organización secuencial

Los archivos organizados secuencialmente contienen un registro particular –el último- que
contiene una marca fin de archivo detectable mediante las funciones

• EOF.- End of File

• FDA.- Final de Archivo

• FDF.- Final de Fichero

• FF.- Fin Fichero

• FA.- Fin Archivo


– Organización directa o aleatoria (random)

Las condiciones para que un archivo sea de organización directa son:

– Almacenamiento en un soporte direccionable.

– Los registros deben contener un campo específico denominado clave que identifica a cada
registro como único, es decir, dos registros no pueden tener el mismo valor clave.

– Existencia de una correspondencia entre los posibles valores de la clave y las direcciones
posibles sobre el soporte.

– Organización secuencial indexada (indexed)

Un archivo está organizado en forma secuencial indexada si:

– El tipo de sus registros contiene un campo clave identificador.

– Los registros están situados en un soporte direccionable por el orden de los valores
indicados por la clave.

– Existe un índice con cada una de las posiciones direccionables, que almacena la dirección
de la posición y el valor de la clave; en esencia, el índice contiene la clave del último registro
y la dirección de acceso al primer registro del bloque.

Listas enlazadas:
Es una estructura dinámica de datos. Cada objeto de la estructura está formado por los datos
junto con un puntero al siguiente objeto. Al manejar punteros, los datos no tienen por qué estar
situados en posiciones consecutivas de la memoria, y lo más normal, es que estén dispersos. 
Pilas Y Colas:

Son estructuras de datos que se utilizan generalmente para simplificar ciertas operaciones.
Una pila es una colecciona ordenada de elementos en la cual los datos se insertan o se
retiran por el mismo extremo llamado “parte superior” de la pila.

Una pila está conformada por dos elementos:

• Un espacio suficiente para almacenar los elementos insertados en la pila.

• Una elemento que indique cuál es el elemento en la cima de la pila.

Las operaciones básicas de una pila son:

1. En la pila S, insertar un elemento e: push(S,e)

2. Retirar un elemento de la pila S: pop(S)

3. Verificar si la pila S está vacía: stackempty(S)

4. Saber cuál es el elemento en la cima de la pila S: stacktop(S)


En una cola hay dos extremos, uno es llamado la parte delantera y el otro extremo se llama la
parte trasera de la cola. En una cola, los elementos se retiran por la parte delantera y se
agregan por la parte trasera

Operaciones en una cola

Las operaciones básicas de una cola son “enqueue” (meter) y “dequeue” (sacar)

– enqueue: añade un nuevo elemento al final de la cola

– dequeue: elimina (saca) el primer elemento de la cola

• Otras operaciones usualmente incluidas en el tipo abstracto COLA son:

– isEmpty (estáVacia): verifica si la cola está vacía

– isFull (estáLlena): verifica si la cola está llena

También podría gustarte