2. Preliminares
Presentación
El lenguaje C es uno de los lenguajes de programación más utilizados a
nivel universal y es el punto de partida incluso de otros lenguajes y
aplicaciones informáticas.
En este curso contarás con la teoría suficiente para desarrollar e
implementar algoritmos en lenguaje C y adentrarte en el maravilloso
mundo de la programación.
El lenguaje C no se puede considerar un lenguaje difícil pero su alto
potencial, elevada flexibilidad y sus enormes posibilidades deben ser
manejadas con precaución. Para esto se requiere un correcto
conocimiento de todos los conceptos que maneja, con el objeto de
realizar una programación satisfactoria.
3. Preliminares
Recursos
Los recursos que vamos a utilizar en lenguaje c :
Computador.
Software Borland C cuyo instalador se encuentra incluido en el CD en el
directorio software.
Ejercicios propuestos con el fin de aplicar los conocimientos adquiridos.
4. Contenido
Temas
Introducción.
Características del Lenguaje C
Estructura de un Programa en C
Tipos de Datos
Entrada y Salida por consola
Operadores y Expresiones
Tipos de Sentencias
Punteros
Arreglos
Cadena de Caracteres
Funciones
Estructuras
5. Conceptos Básicos del Lenguaje C
enorme biblioteca de funciones para entrada/salida, tratamiento de
textos, matemáticas, etc.
C es apreciado por la eficiencia del código que produce y es el lenguaje
de programación más popular para crear software de sistemas, aunque
también se utiliza para crear aplicaciones.
Introducción
El Lenguaje C fue creado entre 1970 y 1972 por Brian Kernighan y
Dennis Ritchie.
Desde su nacimiento se fue implantando como el lenguaje de
programación universal, ya que conjugaba tanto los lenguajes de alto
nivel como los de bajo nivel.
A mediados de los ochenta el C se convierte en un estándar internacional
ISO. Este estándar incluye tanto la definición del lenguaje como una
6. Conceptos Básicos del Lenguaje C
Características del Lenguaje C
Sus principales características son:
Programación estructurada
Economía de las expresiones
Abundancia en operadores y tipos de datos.
Codificación en alto y bajo nivel simultáneamente.
Reemplaza ventajosamente la programación en ensamblador (assembler).
Utilización natural de las funciones primitivas del sistema.
No está orientado a ningún área en especial.
Producción de código objeto altamente optimizado.
Facilidad de aprendizaje.
11. Conceptos Básicos del Lenguaje C
Estructura de un programa en C
En general, un programa en C consta de las siguientes partes:
Directivas al preprocesador o librerías.
Definición de tipos de datos.
Declaración de variables.
Definición de funciones.
Cualquier programa debe poseer una función, llamada main, que es la
función que toma el control cuando se ejecuta el programa.
12. Conceptos Básicos del Lenguaje C
Estructura de un programa en C
Veamos ahora el código línea por línea:
#include: es lo que se denomina una directiva de preprocesador o librería, y le indica al compilador
que "incluya" el archivo o biblioteca stdio.h (standard input - output, entrada y salida estándar),
donde se encuentra definida la función printf que se utilizaen el programa.
main(): es una función. Se encuentra en todos los programas en C y es siempre la primera que
toma el control de estos.
"{}": las llaves delimitan el código que corresponde a la funciónmain.
printf: muestra en pantalla el texto que se encuentra entre los paréntesis y las comillas, en este
caso Mi primer programa.
getch(): permite que el programa haga una pausa y no se cerrará hasta que se pulse una tecla.
13. Conceptos Básicos del Lenguaje C
Terminología y Elementos
Variables: son un espacios de almacenamiento para guardar valores.
Una variable también es llamada identificador cuyo nombre se puede
conformar por letras, dígitos, guiones bajo y no debe tener caracteres
especiales.
Constantes: a diferencia de las variables, guardan un valor que no se
puede alterar a lo largo del programa.
Sentencias: es un conjunto de identificadores, etc., escritos en una línea.
En C las sentencias terminan con punto y coma ";".
Operadores: son todos aquellos símbolos para realizar operaciones
aritméticas o lógicas: +, *, /, etc.
14. Conceptos Básicos del Lenguaje C
Terminología y Elementos
Comentarios: sirven sólo para aclarar aspectos del código y son
ignorados por el compilador. Son de gran importancia, ya que si el código
fuente debe ser modificado después de un tiempo, o si es pasado de un
programador a otro, los comentarios pueden facilitarle mucho la tarea de
entenderlo. Los comentarios van delimitados por las marcas "/*" y "*/“ si
es un párrafo o // si es una sentencia, por ejemplo:
// Esto es un comentario
Tabulación: Consiste en estructurar mediante tabulaciones el código del
programa para facilitar su lectura. El criterio general de tabulación es
tabular más las sentencias subordinadas a otras.
Nota: es importante que al escribir un programa se lo haga en
minúsculas ya que C es sensible a mayúsculas y minúsculas. Además no
se deberá utilizar palabras reservadas como variables.
15. Conceptos Básicos del Lenguaje C
Tipos de Datos
Dentro del Lenguaje C se puede manipular los siguientes datos.
TIPO EJEMPLO TAMAÑO
EN
BYTES
VALOR MINIMO VALOR MAXIMO
char ´e´ 1 0 255
short -17 2 -128 127
int 1456 2 -32768 32767
unsigned int 4653 2 0 65535
long 36214 2 -214748368 2147483637
float 12.5 4 3.4 * 10-38 3.4 * 1038
double 0.00006 8 1.7*10-308 1.7*10-308
long double 1 e-8 8 3.4 * 10-4932 1.1 *104932
16. Conceptos Básicos del Lenguaje C
Variables
Una variable es un espacio de almacenamiento o posición de memoria
donde se almacena un valor de cierto tipo de dato. Para hacer uso de
una variable es necesario declararla al inicio del programa como se
muestra en el ejemplo:
Existen variables locales y variables
globales. Las variables locales son
aquellas que se declaran dentro de
las funciones y solo pueden ser
visualizadas dentro de ellas
mientras que las globales se
declaran fuera de la función y
pueden ser visualizadas desde
cualquier parte del programa.
17. Entrada y Salida por Consola
Entrada/Salida Standard
Los programas interactúan con el exterior a través de datos de entrada y
salida. La biblioteca que proporciona estas facilidades es la <stdio.h>. La
salida de los programas se lo hace a través del monitor y la entrada a
través del teclado.
La función printf() visualiza los datos en pantalla los datos del programa.
Para colocar mensajes se debe colocar: printf(“mensaje”); pero si se
desea imprimir un dato se necesita especificar el tipo de dato a través de
una cadena de control: printf( cadena_de_control,dato);
18. Entrada y Salida por Consola
Salida
Las cadenas de control que
acompañan al printf() de acuerdo
al tipo de dato son los siguientes:
Cadena de
control
Dato
%d dato entero decimal
%o El dato entero se convierte a octal
%x El dato entero se conviertea
hexadecimal
%u Dato unsigned int
%c Dato char
%e Dato en notación científica
%f Dato tipo float
%g Dato tipo float
%s Cadena de caracteres
%ld Dato tipo long int
%lf Dato double
19. Entrada y Salida por Consola
printf(); también utiliza
secuencias de escape para
visualizar caracteres que no
están representados por
símbolos y son:
Salida
Secuencia
de Escape
Significado
a alarma
b retroceso de espacio
f avance de página
n retorno de carro y avance de línea
r retorno de carro
t tabulación
v tabulación vertical
barra inclinada
? signo de interrogación
” comillas
20. Entrada y Salida por Consola
Entrada
Para la entrada o ingreso de datos se lo hace a través de: scanf(); al igual que
el printf(); necesita una cadena de control, el & y el nombre de la variable:
scanf(“%d”,&a);
21. Operadores y Expresiones
Operadores
Los programas de computadora se apoyan esencialmente en la realización de
numerosas operaciones aritméticas y matemáticas de diferente complejidad.
Existen varios tipos de operadores:
- Operadores aritméticos, lógicos y relacionales
- Operadores condicionales
- Operador asignación, incrementación y decrementación
22. Operadores y Expresiones
Operadores Áritméticos
Sirven para hacer operaciones aritméticas básicas. Los operadores aritméticos siguen
reglas de prioridad, que especifican la precedencia de las operaciones artiméticas. Los
operadores aritméticos son:
operador tipo ejemplo
+ suma x+y
- resta b-d
* multiplicación a*3
/ división i/2
% mod s%2
23. Operadores y Expresiones
Operadores Lógicos
Se utilizan con expresiones para devolver un valor verdadero o un valor falso. También se
denominan booleanos.
operador tipo ejemplo
! not !(x+y) Produce falso si su
operando es verdadero
&& and (b-d) && (c==-1) Produce verdadero si
ambos operandos son
verdadero y falso si
cualquiera de los
operandos es falso.
¦¦ or (a*3) ¦¦ (z==5) Produce verdadero si
cualquiera de los operando
es verdadero y falso si
ambos operandos son
falsos
24. Operadores y Expresiones
Operadores Relacionales
Son utilizados normalmente en sentencias de selección o repetición. Utilizando estos
operadores se realizan operaciones de igualdad, desigualdad y diferencias relativas.
operador tipo ejemplo
== igual a d==3;
!= diferente f!=g;
> mayor a>4;
< menor b<7;
>= mayor igual a>=9;
<= menor igual c<=10;
25. Operadores y Expresiones
Operador Condicional
Es un operador ternario que devuleve un valor dependiendo de la condición:
Sintaxis:
expresion_c ? expresion_v : expresion_f;
Si la expresion_c es verdadera se realiza la expresion_v y es falsa se realiza la expresion_f
Ejm:
(ventas >5000) ? comision=100 : comision=0;
Si la variable ventas es mayor que 5000 la condición es verdadera y en la variable comisión
se asigna el valor de 100, pero si la variable ventas no es mayor que 5000 entonces en
comisión de coloca 0;
26. Operadores y Expresiones
Operador Asignación, Incremento, Decremento y Especiales
Operador Asignación asigna el valor de la expresión derecha a la variable situada a su
izquierda.
Ejm:
i=0;
a=b;
a=b=c=3;
z=z*5;
Operadores de Incremento y Decremento suman o restan 1 a su argumento.
Ejm:
++n;
--m;
Operadores Especiales () para llamadas a funciones y el [] para dimensionar arreglos o
cadenas de caracteres.
Ejm:
clrscr();
getch();
sumar(a,b);
27. Operadores y Expresiones
Expresiones
Al combinarse operandos y operadores forman las llamadas expresiones. Las mismas que
siguen ciertas reglas de prioridad para ser resueltas y son:
PRECEDENCIA OPERADORES ASOCIATIVIDAD
0 ()[] -> . izq. a derecha
1 sizeof (tipo) ! ~ ++ -- signo* & derecha a izq.
2 * / % izq. a derecha
3 + - izq. a derecha
4 > izq. a derecha
5 >= izq. a derecha
6 == != izq. a derecha
7 & izq. a derecha
8 ^ izq. a derecha
9 | izq. a derecha
10 && izq. a derecha
11 || izq. a derecha
12 ?: derecha a izq.
13 = += -= *= etc derecha a izq.
28. Estructuras de Control
Tipos de Sentencias
Tenemos tres tipos de sentencias de programación:
- Sentencias Secuenciales
- Sentencias Repetitivas
- Sentencias Selectivas
Todos los programas vistos son ejemplos de sentencias secuenciales es decir
tienen instrucciones que se ejecutan una después de la otra.
29. Estructuras de Control
Sentencias de Selección
Dentro de las sentencias de selección tenemos la sentencia if.
Sintaxis:
if (expresión)
instrucción;
La sentencia if funciona de la siguiente manera: cuado se ejecuta una sentencia if
se evalúa la expresión del paréntesis, si esta expresión es verdadera se cumple
la o las instrucciones.
31. Estructuras de Control
Sentencias de Selección
El segundo formato de if es if-else y tiene la siguiente sintaxis.
if (expresión)
accion1;
else
accion2;
Ejm:
32. Estructuras de Control
Sentencias de Selección
La sentencia if también puede ser utilizada para implementar decisiones
que impliquen diferentes alternativas mediante if anidados.
33. Estructuras de Control
Sentencias de Selección
En la sección de selector solo se podrá trabajar con variables de tipo int o
char. Este tipo de instrucción es ideal para la elaboración de menús.
Ejemplo:
34. Estructuras de Control
Sentencias de Repetición
Estas sentencias realizan la repetición o iteración de acciones. Existen tres tipos de ciclos
de repetición: while, do-while, for.
Sintaxis:
while (condición)
{
instrucción1;
Instrucción2;
}
do
{
instrucción1;
Instrucción2;
} while (condición);
for (inicio; condición; incremento)
{
instrucción1;
Instrucción2;
}
35. Estructuras de Control
While
Este bucle tiene una condición la misma que es evaluada en primer lugar, si la
condición es verdadera se ejecuta las instrucciones internas pero si es falsa
salta hacia la siguiente instrucción fuera del bucle.
36. Estructuras de Control
Do - While
A diferencia del while este bucle cumple con las instrucciones y luego pregunta
por la condición, si es verdadera regresa al bucle y si es falsa salta a la
siguiente instrucción fuera del bucle.
37. Estructuras de Control
For
Este bucle sirve para ejecutar un bloque de sentencias en número fijo de veces.
En el for tenemos una sección de inicialización de variables, una condición que
permite repetir siempre y cuando sea verdadera,el incremento en donde se
incrementa o decrementa la variable inicializada, y finalmente tenemos las
sentencias las cuales serán ejecutadas en cada iteración.
38. Estructuras de Control
For
En el for puedo inicializar una o más variables, así como también colocar 2 o
más condiciones y hasta colocar incementos o decrementos de variables
diferentes.
Así:
for (int i=0; int j=1; i<=n, j==0;i++,j++)
printf(“holan”);
Cuando for no tiene ninguna instrucción se denomina ciclo infinito.
Así:
for( ; ; )
No se debe colocar punto y coma luego del paréntesis del for debido a que no
se ejecuta.
39. Punteros
El valor de cada variable está almacenado en un lugar determinado de
la memoria, caracterizado por una dirección (que se suele expresar con
un número hexadecimal). El computador mantiene una tabla de
direcciones que relaciona el nombre de cada variable con su dirección
en la memoria.
Nombre variable Dirección
nombre 0x0013ff70
edad 0x0013ff7c
Ejemplo de direcciones de memoria de
las variables nombre y edad
40. Punteros
Los punteros son un tipo especial de variables destinadas a contener
direcciones de variables.
Por tanto, la variable de tipo puntero:
contiene la dirección de una variable.
permite una codificación más compacta y eficiente.
Ejm:
int *p; //declaración del puntero p
Un puntero ocupa 2 bytes de memoria indiferentemente de la dirección
que contenga o la variable a la que apunte.
41. Punteros
Cuando se trabaja con punteros hay dos operadores que se debe tomar
muy en cuenta el operador & y el operador *.
El operador dirección (&):
- Permite hallar la dirección de la variable a la que se aplica.
- Solo es aplicable a objetos que están en memoria
El operador de indirección (*):
- Permite acceder al valor depositado en la zona de memoria a la que
apunta un puntero.
42. Punteros
Es de importancia saber que los punteros deben declarar o
definir de acuerdo con el tipo del dato al que apunta.
Por ejemplo, un puntero a una variable de tipo int se declara del
siguiente modo:
int *puntero;
Ahora que está claro el concepto de puntero vamos a ver su
funcionamiento a través de un ejemplo.
void main() {
int x=1,y=2;
int *p;
p=&x;
y=*p;
*p=(y+2);
}
0x0018ff04
0x0018ff00
0x0018ff02
p
RAM
1
Y=2
3
X=1
43. Arreglos
Un arreglo permite agrupar datos del mismo tipo y bajo un mismo
nombre.
Sintaxis:
double a[5];
En esta sentencia se declara un arreglo de tipo double llamado “a” de
diez posiciones, donde cada posición puede almacenar un double.
Para poder acceder a las posiciones del arreglo se lo realiza a través de
subíndices.
Graficamente un arreglo se representa:
0 1 2 3 4 subíndices
5.4 8.2 3.4 5.8 7.5
Valores del arreglo
44. Arreglos
El tamaño de un vector puede definirse con cualquier expresión
constante entera.
En C no se puede operar con todo un vector o toda una matriz como
una única entidad, sino que hay que tratar sus elementos uno a uno por
medio del ciclo for.
Lectura de una arreglo:
for (int i=0; i<n; i++) {
printf(“Ingrese el elemento:n“);
scanf(“%d“,&a[i]);
}
donde n es la dimensión del arreglo.
Impresión de una arreglo:
for (int i=0; i<n; i++) {
printf(“%d“,a[i]);
}
donde n es la dimensión del arreglo.
45. Matrices
0
1
4 7 1 3
5 8 10 2
filas
Las matrices se declaran de forma análoga a los vectores, con
corchetes independientes para cada subíndice. Los valores tanto de filas
como de columnas comienzan desde cero, al igual que los vectores.
columnas
0 1 2 3
Declaración:
tipo_dato nom_matriz [filas][columnas];
Ejm:
int matriz [2][4];
46. Matrices
Lectura de una matriz:
for (int i=0; i<nfilas; i++) {
for (int j=0; j<ncolumnas; j++){
printf(“Ingrese el elemento:n“);
scanf(“%d“,&a[i][j]);
}
}
Impresión de una matriz:
for (int i=0; i<nfilas; i++) {
for (int j=0; j<ncolumnas; j++)
printf(“%d“,a[i][j]);
}
47. Cadena de Caracteres
Una cadena de caracteres es un arreglo de tipo char, pero se diferencia de un
arreglo en que posee un último caracter NULL que marca el final de mi cadena
de caracteres. Además dentro de las cadenas de caracteres tenemos funciones
especiales para el manejo de las mismas.
- Entre las principales funciones de cadena de carcteres están:
strlen()
strcat()
strcmp()
strcpy()
Se debe incluir la biblbioteca string.h para poder utlizarlas
48. Cadena de caracteres
Función strlen();
El prototipo de esta función es como sigue: unsigned strlen(const char *s);
Su nombre proviene de string length, y su misión es contar el número de
caracteres de una cadena, sin incluir el '0' final.
El paso del argumento se realiza por referencia, pues como argumento se
emplea un puntero a la cadena (tal que el valor al que apunta es constante
para la función; es decir, ésta no lo puede modificar), y devuelve un entero sin
signo que es el número de caracteres de la cadena.
49. Cadena de caracteres
Función strcat();
El prototipo de esta función es como sigue:
char *strcat(char *s1, const char *s2);
Su nombre proviene de string concatenation, y se emplea para unir dos
cadenas de caracteres poniendo s2 a continuación de s1. El valor de retorno
es un puntero a s1.
Los argumentos son los punteros a las dos cadenas que se desea unir. La
función almacena la cadena completa en la primera de las cadenas. Por esta
razón se debe procurar tener suficiente espacio para guardar toda la cadena
50. Cadena de caracteres
Función strcmp(); strcat();
El prototipo de la función strcmp() es como sigue:
int strcmp(const char *s1, const char *s2)
Su nombre proviene de string comparison.
Sirve para comparar dos cadenas de caracteres.
Como argumentos utiliza punteros a las cadenas que se van a comparar.
La función devuelve cero si las cadenas son iguales,
Un valor menor que cero si s1 es menor en orden alfabético que s2,
y un valor mayor que cero si s1 es mayor que s2.
51. Funciones
Función strcpy();
El prototipo de la función strcpy() es como sigue:
char *strcpy(char *s1, const char *s2)
Su nombre proviene de string copy y se utiliza para copiar cadenas.
Utiliza como argumentos dos punteros a carácter: el primero es un puntero a la
cadena copia, y el segundo es un puntero a la cadena original.
El valor de retorno es un puntero a la cadena copia s1.
Es muy importante tener en cuenta que en C no se pueden copiar cadenas de
caracteres directamente, por medio de una sentencia de asignación. Por
ejemplo, sí se puede asignar un texto a una cadena en el momento de la
declaración:
char cadena[] = "Esto es una cadena"; //correcto
Otro ejemplo
char cadena1[20] = "Esto es una cadena";
char cadena2[20];
52. Funciones
Funciones
En forma general podríamos decir que:
Una función es un código independiente del programa principal, y su objetivo
es la realización de una tarea específica.
Para llamar a una función se debe invocar con el nombre acompañado por los
parámetros (en el caso que los necesite).
Con el uso de funciones se puede dividir el programa en partes de finalidad
concreta.
Las funciones facilitan el desarrollo y mantenimiento de programas.
Ahorran memoria.
53. Funciones
Definición de una función
Para definir una función se debe hacer de la siguiente forma:
Tipo_valor_retorno nombre_funcion(lista de argumentos con tipos)
{
declaración de variables y/o de otras funciones
código ejecutable
return (expresión); // optativo
}
La declaración de variables se hace al comienzo y ellas sólo son visibles dentro
de la función.
El código ejecutable es el conjunto de instrucciones que deben ejecutarse cada
vez que la función es llamada.
La lista de argumentos con tipos, es una lista de declaraciones de variables,
precedidas por su tipo correspondiente y separadas por comas (,).
54. Funciones
Una vez ejecutada la función, ésta puede que retorne un valor, este valor
debe quedar especificado antes del nombre de la función.
Si no se especifica un tipo especial se asume por defecto el tipo int. En el
caso de no querer retornar valor alguno la función debe declararse como
void.
La sentencia return permite volver al procedimiento donde fue llamada la
función.
Return permite devolver valores de variables como resultado de la
función
No puede devolver matrices o arreglos, para esto se pueden retornar
punteros a estos arreglos.
Return permite devolver estructuras.
55. Funciones
Paso de argumentos y parámetros de funciones
Cuando es llamada una función los argumentos que le son entregados
desde del programa principal pueden ser de dos formas por valor o por
dirección.
Se envía parámetros por valor cuando se necesita que estos valores sean
usados dentro de la función. Ejm: función sumar, restar, factorial,etc.
Se envía parámetros por dirección o referencia cuando estos valores va a
ser modificados dentro de la función. Ejm: función intercambio de valores.
A continuación vamos a ver unos ejemplos para poder diferenciar los dos
tipos de envío de argumentos.
56. Funciones
int sumar(int x,int y)
{
return(x+y);
}
Paso de argumentos por valor
void main(){
int a,b;
printf(“nIngrese el primer valor”);
scanf(“%d”,&a);
printf(“nIngrese el segundo valor”);
scanf(“%d”,&b);
c=sumar(a,b);
printf(“nEl resultado es:%d”,c);
getch();
}
57. Funciones
void intercambio(int *x,int *y)
{
int aux;
aux=*x;
*x=*y;
*y=aux;
}
Paso de argumentos por dirección o referencia
void main(){
int a,b;
printf(“nIngrese el primer valor”);
scanf(“%d”,&a);
printf(“nIngrese el segundo valor”);
scanf(“%d”,&b);
intercambio(&a,&b);
printf(“n%d”,a);
printf(“n%d”,b);
getch();
}
58. Estructuras
Definición
Es un tipo de dato compuesto por un grupo de datos donde cada uno de
los cuales puede ser un tipo distinto.
Sirven para organizar datos complicados
A cada componente de la estructura se le llama campo
A través de las estructuras podemos crear nuestros propios tipos de datos.
Ejemplos:
Datos de una persona
- nombre
- dirección
- teléfono
Punto en el plano cartesiano
- componentex
- componentey
59. Estructuras
Creación de una estructura
Para crear una estructura se utiliza la palabra reservadastruct.
Ejm:
struct fecha{
int dia;
char mes[14];
int anyo;
};
Otro ejemplo:
struct punto{
int x;
int y;
};
struct rectangulo{
struct punto pt1;
struct puntopt2;
};
60. Estructuras
Trabajar con estructuras
La declaración de la estructura se la realiza fuera del void main(); luego de las bibliotecas. Y
las variables se definen dentro del void main().
struct complejo{
double x;
double y;
} ;
void main() {
complejo a,b;
}
61. Estructuras
Acceso a los campos de una estructura
Como la estructura es un conjunto de diferentes tipos de datos llamados campos, a
cada uno de esos se accede mediante un punto.
struct complejo{
double x;
double y;
} ;
void main() {
complejo a; // a es una variable de tipo complejo por lo tanto tiene los camposx,y
printf (“Ingrese la parte racional”);
scanf(“%d”,&a.x);
printf (“Ingrese la parteimaginaria”);
scanf(“%d”,&a.b);
}
62. Estructuras
Punteros a estructuras
La utilización de pnteros para apuntar estructuras es muy utilizado de esta manera se
optimiza el ingreso y la manipulación de los datos. El acceso a los puntos se realiza a
través del operador flecha ->.
Ejm:
struct complejo{
doublex;
doubley;
} ;
void main() {
complejo a;
complejo*p;
p=&a;
p->a=4;
p->b=5;
}
63. Estructuras
Listas Simples
Una lista enlazada simple es una colección o secuencia de elementos
dispuestos uno detrás de otro conectados entre sí a través de punteros.
Los elementos de una lista se denominan nodos, un nodo se compone
de dos campos: el primero contiene la información y el segundo es el
puntero que se conecta con los demás nodos de la lista.
Una lista enlazada simple tiene un inicio y un final, el inicio es un
puntero llamado cab que es la cabecera de mi lista y el final de la
misma es el último nodo cuyo campo sig apunta a NULL.
6
cab
4 1 7
64. Estructuras
Listas Simples
Para crear una lista enlazada simple partimos de un puntero cabecera cab,
al cual se insertan los demás nodos conforme se van creando.
En este tipo de listas tenemos funciones para insertar o crear nodos,
eliminar nodos, buscar nodos, vaciar la lista, etc. Todas esto se realiza a
través de funciones ya que se trabaja con memoria dinámica, la misma
que así como se crea o reserva memoria también se tiene que eliminar o
liberar memoria.
65. Estructuras
Listas Circulares
Este tipo de lista se diferencia de la anterior en que la cabecera se
encuentra en el útlimo nodo y el campo siguiente del último nodo se
encuentra conectado al primer nodo de la lista, formando así una lista
circular. La principal ventaja es que se puede recorre la lista en modo
circular. Al igual que las anteriores, las listas circulares también tiene
sus propias funciones para insertar, buscar, eliminar y vaciar nodos.
6
cab
4 1 7
66. Estructuras
Listas Doblemente enlazadas
Es una lista que tiene dos campos punteros el uno que apunta al anterior
nodo y el otro al siguiente, de manera que se pueda realizar un recorrido
de la lista hacia adelante y hacia atrás.También podemos hacer la
inserción de un nodo, la eliminación, búsquedas y vaciado de estas listas.
6
cab
4 1 7
Para comprender un poco más sobre el tema de listas simples, circulares y
doblemente enlazadas le invito a estudiar el manual diponible en el CD en
formato pdf directorio Listas, en donde se encuentran todas las funciones
con respecto al tema de listas.