Guia de Estructura de Datos
Guia de Estructura de Datos
Guia de Estructura de Datos
FACULTAD DE INGENIERIA
DEPTO. DE PROGRAMACIN
CABUDARE. EDO. LARA
INTRODUCCIN
las computadoras fueron diseadas o ideadas como una herramienta
mediante la cual podemos realizar operaciones de clculo complicadas en
un lapso de mnimo tiempo. Pero la mayora de las aplicaciones de este
fantstico invento del hombre, son las de almacenamiento y acceso de
grandes cantidades de informacin.
La informacin que se procesa en la computadora es un conjunto de datos,
que pueden ser simples o estructurados. Los datos simples son aquellos que
ocupan slo una localidad de memoria, mientras que los estructurados son
un conjunto de casillas de memoria a las cuales hacemos referencia
mediante un identificador nico.
Debido a que por lo general tenemos que tratar con conjuntos de datos y no
con datos simples (enteros, reales, booleanos, etc.) que por s solos no nos
dicen nada, ni nos sirven de mucho, es necesario tratar con estructuras de
datos adecuadas a cada necesidad.
Las estructuras de datos son una coleccin de datos cuya organizacin se
caracteriza por las funciones de acceso que se usan para almacenar y
acceder a elementos individuales de datos.
En esta gua vamos a tratar el tema relacionado con las estructuras de
datos en cuanto a:
puede
variar
Arreglos o Arrays:
Un arreglo (array) es una coleccin de datos del mismo tipo, que se
almacenan en posiciones consecutivas de memoria y reciben un
nombre comn. Para referirse a un determinado elemento de un
array se deber utilizar un ndice, que especifique su posicin
relativa en el array.
Un arreglo es una coleccin finita, homognea y ordenada de
elementos.
Finita: Todo arreglo tiene un lmite; es decir, debe determinarse cul
ser el nmero mximo de elementos que podrn formar parte del
arreglo.
Homognea: Todos los elementos del arreglo deben ser del mismo
tipo.
Ordenada: Se puede determinar cul es el primer elemento, el
segundo, el tercero,. y el n-simo elmento.
Los arreglos se clasifican de acuerdo con el nmero de dimensiones
que tienen. As se tienen los:
Arreglos Unidimensionales:
Estn formados por un conjunto de elementos de un mismo tipo de
datos que se almacenan bajo un mismo nombre, y se diferencian por
la posicin que tiene cada elemento dentro del arreglo de datos.
Dentro del arreglo, los programas especifican el nombre de ste y el
nmero del elemento, colocndolo dentro de corchetes, como en
calificacin[3].
Al declarar un arreglo, se debe inicializar sus elementos antes de
utilizarlos.
Para declarar un arreglo tiene que indicar su tipo, un nombre nico y
la cantidad de elementos que va a contener. Por ejemplo, las
siguientes instrucciones declaran tres arreglos distintos en lenguaje
C:
Float
Int
Float
costo_partes[50];
edad_empleados[100];
precios_acciones[25];
Inicializacin
Para inicializar con cero todos los elementos del arreglo:
For( i = 0; i< tamao i++){
arre[i] =0;
}
direccin
del
primer
elemento
del
arreglo.
Para acceder a un elemento especifico del arreglo , se utiliza el
nombre de ste seguido por uno o ms ndices (donde cada uno
representa una dimensin del arreglo o array) encerrado entre
corchetes. Supongamos que tenemos un arreglo unidimensional
llamado X con un tamao de n elementos, su esquema grafico es el
siguiente:
int
char
float
char
num[100];
(un
array
apellido[25];
(un
array
prom[30];
(un
array
de
contrasena[16];
(un
array
de
de
30
de
100
enteros)
25
caracteres)
coma
flotante)
16
caracteres)
int promedios[tamano];
/* Leer valores utilizando la variable i como contador dentro del ciclo
FOR y ++i como acumulador*/
for (i=0; i < tamano; ++i){
scanf(%d,&promedios[i]);
.....
.....
}
La utilizacin de constantes definidas garantiza que las siguientes
referencias al arreglo no sobrepasen el tamao definido para el
mismo.
El lenguaje C no comprueba que los ndices del array estn dentro
del rango definido.
Otra forma de Inicializacin de arreglos:
En ciertas circunstancias puede ser necesario darle valores iniciales a
los arreglos, para ello basta con colocar entre llaves el conjunto de
valores deseados separados por comas y en el orden requerido. A
continuacin se muestran algunos ejemplos:
a)int cant[6]={12,-3,0,15,8};
b) double DesvTipica[8]={0.23, 3.1416, -0.5, 2.16789, -56.78, 25,
0.15, -14 };
c) char meses[12]={E, F, M, A, M, J, J, A, S, O, N, D};
Para el caso del arreglo cant es como tener:
Cant[0]=12
Cant[1]= -3
Cant[2]=0
Cant[3]=15
Cant[4]=8
Cuando los elementos del arreglo no tienen asignados valores
iniciales explcitos, stos son puestos a cero, a continuacin tenemos
un ejemplo:
int edades[8]={25,13,18};
El resultado de la asignacin seria el siguiente:
Edades[0]=25;
Edades[1]=13;
Edades[2]=18;
Edades[3]=0;
Edades[4]=0;
Edades[5]=0;
Edades[6]=0;
Edades[7]=0;
Este mtodo de inicializar arreglos mediante valores constantes
despus de su definicin, es adecuado cuando el nmero de
system("cls" );
printf ("PROGRAMA PARA CALCULAR \n");
printf(" PROMEDIO, SUMA, CUADRADO, CUBO Y DESV. EST.\n\n") ;
//Captura de valores y suma de los mismos
for(i = 0 ; i < tam ; ++i)
{
printf ("num [%d] = " , i) ;
scanf ("%lf" , &vector[i]) ;
suma+= vector[i] ;
}
prom = suma / tam ;
printf (" \n El promedio de los numeros es: %4.2f\n ", prom) ;
//Calculo e impresin de cuadrado, cubo y desviacin estandar
printf(" \n \n NUMERO CUADRADO CUBO DESV. EST.\n");
for( i = 0 ; i < tam ; ++i )
{
cuadrado = vector[i] * vector[i] ;
cubo = pow (vector[i], 3) ;
desv = vector [i] - prom ;
printf ("%.2lf", vector[i] ) ;
printf (" \t%.2lf", cuadrado) ;
printf (" \t%.2lf", cubo) ;
printf (" \t%.2f\n", desv) ;
}
system("pause");
return(0);
}
Nota que los valores fueron declarados de tipo double no enteros, por
el tamao de los valores que se generan en los clculos.
Ejemplo2:
El siguiente programa lee 5 valores de teclado y los guarda en un
arreglo a. Luego los escribe.
#include<stdio.h>
#include<stdlib.h>
main()
{
Int a[5],i,num;
for(i=0; i<5;i++){
printf("Digite el numero:\n");
scanf("%d",&num);
a[i]=num;
}
printf("\nEscribiendo el arreglo con los datos leidos:\n\n");
for(i=0; i<5;i++){
printf("a[%d]= %d\n\n",i,a[i]);
}
system("pause");
return 0;
}
Ejemplo 3:
El siguiente programa, pide 5 nmeros y calcula los cubos de ellos,
los cuales son guardados en un arreglo y son desplegados.
#include stdio.h>
#include stdlib.h>
#include math.h>
main()
{
int i;
double a[5], num;
for (i=0; i<5; i++)
{
printf("\n Digite numero:");
scanf("%lf", &num);
a[i]=num;
}
printf("_________________________________________\n");
printf("Los cubos de los nmeros ledos son:\n");
for (i=0; i<5; i++){
a[i]=pow(a[i],3);
printf("%.0lf\n",a[i]);
}
printf("\n");
system("pause");
return 0;
}
El lenguaje C no realiza comprobacin de contornos en los arreglos.
En el caso de que sobrepase el final durante una operacin de
asignacin, entonces se asignarn valores a otra variable o a un trozo
del cdigo, esto es, si se dimensiona un arreglo de tamao N, se
puede referenciar el arreglo por encima de N sin provocar ningn
mensaje de error en tiempo de compilacin o ejecucin, incluso
aunque probablemente se provoque el fallo del programa. Como
programador se es responsable de asegurar que todos los arreglos
sean lo suficientemente grandes para guardar lo que pondr en ellos
el programa.
Nota 1: C permite arreglos con ms de una dimensin, el formato
general es:
Tipo de dato nombre_arreglo[ tam1 ][ tam2 ] [ tamN];
Arreglos Bidimensionales: (Matrices):
matriz1[4 ][3];
EJEMPLO:
El siguiente programa realiza la lectura de una matriz de 7 renglones y 15
columnas (de una matriz de orden [7x15]) rengln por rengln).
Lenguaje C:
#include <stdio.h>
#include<conio.h>
#define fil 7
#define col 15
main ()
{
int i, j;
Int x [fil ][col];