Documente Academic
Documente Profesional
Documente Cultură
Estructuras de datos
En anteriores lecciones, hemos visto cmo escribir instrucciones
complejas a partir de instrucciones simples
Hasta ahora hemos visto datos simples, que ocupan una posicin
de memoria
enteros
reales
caracteres
lgicos
Estructuras de datos
Las E.D. ms importantes son:
Estructuras Matriciales
Vectores (1xN)
Matrices (MxN)
Matrices multidimensionales (MxNxPxQx...)
Cadenas de caracteres
Estructuras de datos
Las E.D. ms importantes son:
Vectores
Es una E.D. constituida por varios datos del mismo tipo,
agrupados bajo un nombre comn
Lo declararemos de la siguiente forma:
<tipo> <nombre>[<numero de elementos>]
Ejemplos:
int A[10];
char dni[8];
char nombre[40];
complejo V[10];
Vectores : representacin
Sea la declaracin
int A[4]
A[0]
A[1]
A[2]
A[3]
int A[4];
A[0]
A[1]
A[2]
A[3]
Recorrido de un vector
Dado que el acceso a los elementos de un vector se hace elemento
a elemento, y que se conoce a priori su tamao, es muy frecuente
acceder a sus elementos con un bucle DESDE
for (i=0;i<N;i++)
A[i] = i+1;
Asignar valores aleatorios
for (i=0;i<N;i++)
A[i]=rand();
Rotar sus valores hacia la izquierda
aux = A[0];
for (i=0;i<N-1;i++){
A[i]=A[i+1];
}
A[N-1]=aux;
Problemas propuestos
Criba de Eratstenes para el clculo de los nmeros primos
Convertir nmeros romanos a decimal
Bsqueda
Secuencial
Binaria
Ordenacin
seleccin
burbuja
insercion
qsort
Estructuras de datos
Las E.D. ms importantes son:
Estructuras Matriciales
Vectores (1xN)
Matrices (MxN)
Matrices multidimensionales (MxNxPxQx...)
Cadenas de caracteres
Matrices
Es una E.D. similar al vector, es decir, constituida por varios
datos del mismo tipo, agrupados bajo un nombre comn,
pero donde el acceso se realiza por 2 ndices
El acceso a cada uno de los elementos se realiza por varios
ndices , que indican su posicin relativa en la fila y en la
columna
Lo declararemos de la siguiente forma:
<tipo> <nombre>[<numfilas>][<numcols>];
Ejemplos:
int A[10][20];
complejo V[10][5];
Matrices : representacin
Sea la declaracin
int A[2][3];
A[0][0]A[0][1]A[0][2]
A[1][0]A[1][1]A[1][2]
A[0] [0]
A[0] [1]
A[0] [2]
A[1] [0]
A[1] [1]
A[1] [2]
for(i=0;i<M;i++)
for (j=0;j<N;j++)
A[i][j]=0;
0
1
2
3
1
2
3
4
2
3
4
5
3
4
5
6
4
5
6
7
0
1
2
3
1
0
1
2
2
1
0
1
3
2
1
0
4
3
2
1
0
1
2
3
1
1
2
3
2
2
2
3
3
3
3
3
4
4
4
4
6
4
1
0
6
4
1
1
6
4
4
4
6
6
6
6
8
8
8
8
for(i=0;i<M;i++)
for (j=0;j<N;j++)
A[i][j]=random(100)+1;
for (i=0;i<N;i++)
for (j=0;j<N;j++)
aux = A[i][j];
A[i][j] = A[j][i];
A[j][i] = aux;
Problemas propuestos
Calcular la inversa de una matriz ANxN utilizando eliminacin gaussiana de forma
anloga al determinante
Resolucin de sistemas de ecuaciones lineales
Juego de la vida (John Conway). Cuatro reglas:
Un organismo nace en una celda vaca si est rodeada por 3 vecinos vivos
Un organismo sobrevive con 2 3 vecinos vivos
Un organismo con 4 ms vecinos vivos muere por superpoblacin.
Un organismo con 0 1 vecino vivo muere de soledad
Estructuras de datos
Las E.D. ms importantes son:
Matrices multidimensionales
Es una E.D. similar a las matrices, pero con ms de 2
dimensiones
El acceso a cada uno de los elementos se realiza por
tantos ndices como dimensiones , que indican su
posicin relativa en cada dimensin
Lo declararemos de la siguiente forma:
<tipo> <nombre>[<numdim1>][<numdim2>]... >][<numdimn>]
Ejemplo:
int cubo_rubik[3][3][3]
Estructuras de datos
Las E.D. ms importantes son:
Cadenas de caracteres
No son ms que vectores de caracteres
Nos permitirn almacenar en un vector de N elementos, cadenas
de caracteres de longitud N-1
Los caracteres vlidos del vector son todos aquellos desde el
comienzo hasta que hay un elemento cuyo cdigo ASCII es el 0
Cadena vlida
Caracteres
Codio ASCII
76
97
32
112
101
122
97
114
Cadenas de caracteres
En C, una cadena de caracteres se declara como un
vector de chars
char cadena[80];
El carcter "fin de cadena" es aquel cuyo cdigo ascii
es 0
Las funciones de manejo de cadenas se encuentran
en la librera <string.h>
(gets)
Escritura en pantalla
(puts)
(strcpy)
(strstr)
(strcat)
(strlen)
Problemas propuestos
Reescribir todas las funciones de manejo de cadenas
vistas
Realizar la funcin
insertar(cadena,subcadena,posicion)
Realizar la funcin encontrar(cadena,subcadena):int
Invertir una cadena sin usar ninguna cadena auxiliar
Determinar si una cadena es palndroma
Vectores y matrices
Slo se pueden pasar por referencia
No es posible de ninguna forma, directa o indirecta, pasar un
vector o matriz por valor
Opcin A
Opcin B
Opcin B
inicializa1(M,10,5);
Llamada
Problemas propuestos
Reescribir todas las funciones de manejo de cadenas vistas
Realizar la funcin insertar(cadena,subcadena,posicion)
Realizar la funcin encontrar(cadena,subcadena):int
Invertir una cadena sin usar ninguna cadena auxiliar
Determinar si una cadena es palndroma
Leer una cadena, y escribir cuntas veces aparece cada una
de sus letras
Bsqueda y ordenacin
Mtodos de Bsqueda
Se trata de resolver el problema de encontrar un elemento
dado en una E.D.
Reduciremos el problema a buscar un elemento en un vector
Es fcil extender los principios explicados a otras E.D.
Los mtodos bsicos de bsqueda sobre vectores son:
Bsqueda lineal
Bsqueda binaria
Bsqueda lineal
Consiste en recorrer de forma secuencial todos los elementos del vector. El pseudocdigo es:
Bsqueda binaria
Slo es aplicable a vectores ordenados
Es preciso que:
Archivo ordenado por clave
Registros de longitud fija
medio = round((inicio+final)/2);
if(datobuscado == v[medio])
return (medio);
else{
inicio = medio+1;
else
final = medio-1;
return -1;
Mtodos de ordenacin