Sunteți pe pagina 1din 11

Estructuras de Datos

Una estructura de datos es una coleccin de datos que se caracterizan por


su forma de organizacin y las operaciones que se pueden definir sobre
dicha estructura.
Nosotros ya estamos familiarizados con los datos simples, como enteros
(int), caracteres (char), etc. Una estructura de datos es una coleccin de
datos simples, como por ejemplo un vector o arreglo.

La clasificacin de las estructuras de datos segn su forma en que se


almacenan y se gestionan en memoria las estructuras:

Estructuras de Datos Estticos

Arreglo

Un arreglo es un conjunto o coleccin finita de datos de un mismo tipo. Los


elementos de un arreglo pueden ser accedidos por medio de un subndice i.
Podemos considerar a un arreglo desde el punto de vista matemtico como
un vector, y a un arreglo bidimensional como una matriz.

Declaracin de un Arreglo

Un arreglo se define indicando el tipo de arreglo, es decir, el tipo de datos


de todos los elementos del arreglo, luego se le da un nombre al arreglo y
finalmente se le da un tamao.

<tipo> nombreArreglo[Tamao]

Por ejemplo tengo un arreglo de nmeros enteros:


int arreglo[4]
En el caso anterior el tipo del arreglo es entero (int).

Se le da una dimensin al arreglo que va entre los caracteres '[' y ']', en el


caso anterior la dimensin es 4, esto quiere decir que en la memoria se
reservaron 4 posiciones para almacenar 4 valores enteros.

Inicializar un Arreglo

Existen varias maneras de inicializar un arreglo, una manera muy sencilla es


poner entre llaves ({ }), los elementos del arreglo separados por comas.
arreglo = {51, 60, 70, 95}

Tambin podemos utilizar la estructura de control for para inicializar los


elementos del arreglo como se ve en el Ejemplo 1

Ejemplo 1

Se desea ingresar las notas finales de 10 alumnos de la materia de


Estructura de Datos, para luego emitir un reporte del promedio de todas las
notas.

#include <iostream>
int main(){
const int TAM = 10
int i, promedio=0
int arreglo[TAM]
for(i=0 i < TAM i++){
cout<<"Ingrese la nota del estudiante #"<<i+1<<" :\n"
cin>>arreglo[i]
}
for(i=0 i < TAM i++)
{promedio = promedio + arreglo[i]}
promedio = promedio / TAM
cout<<"El promedio de las notas es: "<<promedio
}

No hubiera sido muy prctico manejar 10 variables diferentes para guardar


las notas de los 10 alumnos, utilizando un arreglo se nos simplifican mucho
las cosas.
Nota: Se puede declarar un arreglo dndole la dimensin o tamao por un
valor constante
Acceso a los Elementos de un Arreglo

Si se tiene:
arreglo[0]=51
arreglo[1]=60
arreglo[2]=70
arreglo[3]=95

Puedo acceder a un elemento por medio de un subndice, por ejemplo si yo


quiero acceder al primer elemento tendr que hacerlo de esta manera:

int nro = arreglo[0]


En la variable nro se almacenara el valor de 51, para acceder al segundo
valor:
nro = arreglo[1]

En la variable nro se almacenar el valor de 60, y as sucesivamente con los


dems elementos.

Si nos damos cuenta tener un arreglo es mucho ms ventajoso que tener


definidas 4 variables.

Desventajas: En ocasiones, no podemos predecir con precisin el tamao


que un arreglo tendr por lo que podemos definir un arreglo muy grande, lo
que nos lleva a desperdiciar memoria, por ejemplo si defino un arreglo de
100 elemento (arreglo[100]), y slo utilizo 5 posiciones de memoria, las
dems 95 estarn desperdiciadas, la solucin a este problema la veremos
ms adelante en lo que se denomina punteros.

Mtodos de Ordenamiento

1. Ordenacin por Seleccin


Este mtodo es muy sencillo y se trata de buscar el elemento ms pequeo
del arreglo y llevarlo a la primera posicin, luego se avanza a la siguiente
posicin, y se coloca el elemento ms pequeo del arreglo y as
sucesivamente.

2. Ordenacin por Insercin


Este mtodo es capaz de mantener un arreglo ordenado insertando
elementos en su correspondiente posicin, por ejemplo si mi arreglo
contiene los valores {1,3,4} y quiero insertar un nuevo elemento 2, el arreglo
quedar de esta forma {1,2,3,4}.
3. Ordenacin de Burbuja
Este es un mtodo de ordenacin elemental, que hace todas las
comparaciones necesarias para colocar un elemento en la posicin que le
corresponde.

4. Ordenacin MergeSort

5. Ordenacin QuickSort, etc.

Mtodos de Bsqueda

1. Bsqueda Secuencial
Esta bsqueda realiza un recorrido lineal (uno por uno) por todos los
elementos de un arreglo. Es til cuando el tamao del arreglo no es grande
y no tiende a crecer su nmero de elementos.

2. Bsqueda Binaria
Dicha bsqueda es aplicable en arreglos ordenados, pues su
Funcionamiento depende de este hecho.

Arreglos Bidimensionales

Un arreglo bidimensional est compuesto, por un conjunto de elementos


homogneos y se puede acceder a los datos utilizando dos subndices, este
tipo de arreglo es tambin conocido como matriz.

Declaracin
Un arreglo bidimensional se define as:
int arreglo[10][10]
float matriz[10][10]

Tambin podemos utilizar constantes para definir la dimensin del arreglo


de dos dimensiones:
const int N = 10;
int arreglo[N][N]

Inicializacin
Una matriz o arreglo bidimensional se puede inicializar de este modo:
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}}
Con la anterior asignacin se crea en memoria una matriz igual a la de
abajo
012
0123
1456
2789

Fig. 1

Tambin podemos utilizar una estructura for dentro de otra estructura for
para inicializar los valores de un arreglo de dos dimensiones como se
muestra a continuacin:

Ejemplo 2

Leer desde teclado una matriz de nmeros enteros de dimensin 3x3.

#include <iostream>
int main()
{
const int TAM=3
int matriz[TAM][TAM]
for( int i=0 i<TAM i++){
for( int j=0 j<TAM j++){
cout<<Ingrese el elemento [<<i<<,<<j<<]
cin>>matriz[i][j]
}
}

Acceso a los Elementos de un Arreglo Bidimensional

En un arreglo de dos dimensiones necesitamos tambin dos ndices para


acceder a sus elementos.

Si utilizamos: matriz[i][j], entonces i se refiere a la fila y j a la columna.

Para acceder al elemento de la segunda fila y segunda columna de la matriz


de la Fig. 1 hacemos:

int nro = matriz[1][1]


En la variable nro se guardara el nmero 5.
Las matrices o arreglos bidimensionales se suelen utilizar en clculos
matemticos, operaciones con matrices, recorridos por matrices, y cualquier
uso que nosotros le podamos dar.

Se pueden definir arreglos de ms de 2 dimensiones, pero su manejo se


dificultara enormemente.

Ejercicios:
* Se requiere un programa que realice la multiplicacin de dos matrices,
para tal efecto se deben ingresar las dos matrices por teclado teniendo el
cuidado de controlar que la primera matriz tenga una dimensin de N*M y la
segunda de M*N para que se pueda realizar la multiplicacin.

* Los alumnos del primer semestre de la carrera de Informtica son 65.


Todos los alumnos toman inicialmente 6 materias lo que quiere decir que al
final del semestre tendr 6 notas cada alumno. Escribir un programa que
pida las 6 notas de los 65 alumnos y luego devuelva el promedio de todas
las notas.

Cadenas

Carcter

Un carcter es el tomo de los programas de computadora, un carcter es


un smbolo que puede ser una letra del alfabeto o un carcter especial.
Un carcter ocupa 8 bits en memoria, y existen 256 caracteres diferentes.
Cada carcter se lo codifica en un nmero entero, es decir, que cada
carcter tiene su correspondiente representacin entera, el cdigo ASCII es
precisamente esto. Por ejemplo el carcter a tiene como cdigo ASCII el
entero 97

Cadena

Una cadena o cadena de caracteres no es ms que una serie de caracteres


manipulados como una unidad. Si asemejamos una cadena al lenguaje
castellano sera como una palabra o frase, que es un conjunto de letras y
vocales en donde cada una de estas viene a ser un carcter.
Visto desde otro punto vendra a ser un arreglo de caracteres.
Una cadena puede contener cualquier carcter, puede almacenar un
nombre propio, una direccin, es decir, lo que nosotros precisemos.
Declaracin

Una cadena se la define de la siguiente manera


char cadena[20]
La cadena anterior puede contener un mximo de 20 caracteres.

Inicializacin
Se puede inicializar una cadena de la siguiente manera:
cadena = "Hola"

Cualquier valor que se le asigne a una cadena va entre comillas dobles " ",
como en el ejemplo anterior "Hola" esta entre comillas dobles.

Una cadena siempre finaliza con el carcter de fin de cadena \0, que
siempre se aade al final automticamente, en el ejemplo anterior se aade
al final de Hola el carcter de fin de cadena.

Tambin podemos considerar a una cadena como un arreglo de caracteres,


y se puede inicializar de la siguiente manera:

cadena = { H, o, l, a }

El arreglo de caracteres se vera de esta forma:

H o l a \0H o l a \0
0 1 2 3 4

Ntese que en la posicin 4 se aumenta el fin de cadena.

Ejemplo

Se desea tener un programa que sea amable con el usuario, el programa


deber conocer el nombre del usuario y responderle con un mensaje
amigable.

#include <iostream>
int main(){
char nombre[30]
cout<<"Cul es tu nombre?"
cin>>nombre
cout<<"Que tengas un buen da "<<nombre
}
En el ejemplo anterior el mensaje "Cul es tu nombre?" es una cadena
pues esta entre comillas. Tambin es una cadena la variable nombre que
recibir un valor desde teclado.

Operaciones con Cadenas

Existen muchas operaciones que se pueden realizar utilizando cadenas, la


mayora de la operacin que podemos requerir se encuentran ya a nuestra
disposicin dentro de la librera string.h

Nota: Para nuestro curso de Estructura de Datos ser imprescindible saber


cmo funcionan dichas funciones, es decir, tendrn que ser implementadas.

Longitud

La longitud de una cadena la podemos conocer utilizando la funcin strlen.

Sintaxis
strlen( cadena )

Ejemplo

#include <iostream>
#include <string.h>
int main(){
char nombre[30]
int tamano
cout<<"Cul es tu nombre?\n"
cin>>nombre
tamano = strlen( nombre )
cout<<"Tu nombre tiene "<<tamano<<letras
}

Comparacin

Para saber si dos cadenas son exactamente iguales utilizamos la funcin


strcmp.

Sintaxis
strcmp ( cadena1, cadena2 )
Esta funcin devuelve un valor de acuerdo al resultado de la comparacin.

Devuelve:
0 si las dos cadenas son exactamente iguales
Mayor a 0 si la cadena1 es mayor a la cadena2
Menor a 0 si la cadena1 es menor que la cadena2

Ejemplo

#include <iostream>
#include <string.h>
int main()
{
char contrasena[30], reContrasena[30]
int resultado
cout<<"Escribe tu contrasea\n"
cin>>contrasena
cout<<"Re escribe tu contrasea\n"
cin>>reContrasena
resultado = strcmp(contrasena, reContrasena)
if ( resultado == 0 )
cout<<"La contrasea es aceptada"
else
cout<<"La contrasea no coincide"

Copia

Podemos reflejar todo el contenido de una cadena a otra, en otras palabras


la copiamos tal cual, para esto utilizamos la funcin strcpy.

Sintaxis
strcpy( cadenaDestino, cadenaOrigen )

Todo el contenido de la cadenaOrigen se copia a la cadenaDestino, si esta


ltima tuviera algn valor este se borra.

Ejemplo
#include <iostream>
#include <string.h>
int main()
{
char origen[30], copia[30]
cout<<"Qu da es hoy? \n"
cin>>origen
strcpy(copia, origen)
cout<<Hoy es <<copia
return 0
}

Concatenacin

Podemos juntar o concatenar dos cadenas una a continuacin de la otra.


Utilizamos la funcin strcat.

Sintaxis
strcat( cadenaDestino, cadenaOrigen )

Todo el contenido de la cadenaOrigen se aade a continuacin de la


cadenaDestino, si esta ltima contiene algo entonces al final contendr lo
que contena ms el contenido de la cadenaOrigen.

#include <iostream>
#include <string.h>
int main(){
char nombre[30], apellido[30]
cout<<"Cul es tu nombre? \n"
cin>>nombre
cout<<Cul es tu apellido paterno\n
cin>>apellido
strcat(nombre, ) //Se le aade un espacio en blanco
strcat(nombre, apellido)
cout<<Tu nombre completo es <<nombre
return 0
}

Ejemplo :
Escriba una funcin que permita conocer la longitud de una cadena. La
funcin deber llamarse longitud

#include <iostream.h>
#include <string.h>
int longitud(char cadena[])
{
int acum = 0
while( cadena[acum] != '\0' ) //mientras no sea fin de cadena
acum++
return acum
}

Int main()
{
char nombre[30]
cout<<"Cul es tu nombre?\n"
cin>>nombre
cout<<"Tu nombre tiene "<<longitud(nombre)<<" letras"
}

Nota: Parecido a este ejemplo deben de ser implementados los algoritmos


sobre cadenas en laboratorio.

S-ar putea să vă placă și