Sei sulla pagina 1di 5

Curso: Borland C++ L.M.V. 4-6 pm.

ESTRUCTURA DE DATOS
Las estructuras de datos en C++ se pueden entender como un tipo de dato compuesto
(no complejo). Las estructuras de datos permiten almacenar de manera ordenada una
serie de valores dados en una misma variable. Las estructuras de datos más comunes
son los vectores o arreglos y las matrices, aunque hay otras un poco más diferentes
como son el struct y las enumeraciones.
Las estructuras de datos han sido creadas para solucionar una gran variedad de
problemáticas que no eran solucionables (o al menos no muy fácilmente) con los tipos
de datos primitivos. Tal como mencioné hace un momento las estructuras de datos se
pueden ver como una agrupación o estructuración para una serie de tipos de datos
primitivos (aunque también pueden poseer tipos de datos complejos) que pueden ser
fácilmente utilizadas e identificadas. Sin la existencia de las estructuras de datos sería
imposible o bastante complicado por ejemplo conocer y manejar todos los números de
identificación, nombres y direcciones de todos los usuarios de un sistema (que
normalmente serían muchísimos) pero ahora con las estructuras de datos es muy simple
definir una serie de posiciones en memoria para cada valor que deseamos guardar o
definir un orden o valores específicos para cada campo y accediendo a ellos
generalmente por medio de una única variable, todo esto es sencillo hacerlo con el uso
de las estructuras de datos y sin desperdiciar recursos.

ARREGLOS

Los arrays, arreglos o vectores forman parte de la amplia variedad de estructuras de


datos que nos ofrece C++, siendo además una de las principales y más útiles estructuras
que podremos tener como herramienta de programación. Los arrays, arreglos o vectores
(como los quieras llamar), son utilizados para almacenar múltiples valores en una única
variable. En un aspecto más profundo, los arrays, permiten almacenar muchos valores
en posiciones de memoria continuas, lo cual permite acceder a un valor u otro de manera
rápida y sencilla. Estos valores pueden ser números, letras o cualquier tipo de variable
que deseemos incluso tipos de datos propios.

Ejemplos de arrays en C ++:

Imaginemos que queremos crear un programa con el cual podamos de algún modo
almacenar los títulos y los autores de diferentes libros. El usuario es el encargado de
suministrar la información de cada libro, así entonces, dado que es el usuario quien lo
hace, nosotros no tenemos manera alguna de saber cuántos libros va querer él ingresar
por medio de nuestro programa. El caso principal es que queremos almacenar en la
memoria el título y el autor de TODOS y cada uno de los libros. Entonces ¿cómo crees
que podrías hacer esto? Con lo que sabemos hasta hora, se nos podrían ocurrir un par
de cosas. Veamos:
Curso: Borland C++ L.M.V. 4-6 pm.

Posible Solución 1: Sin usar vectores o matrices (errónea):


Pensando un poco más en esto, se nos ocurre una forma de almacenar la información
de cada libro, podríamos crear un par de variables distintas para cada libro. Pero de
inmediato nos damos cuenta que si por ejemplo al usuario se le cruzara por la cabeza
ingresa información para 10 libros tendríamos entonces ¡20 variables distintas!, 2 por
cada libro, no es mucho, pero si se le ocurriera ingresar 1000 libros, ¿estarías dispuesto
a declarar 2000 variables? De modo que esta alternativa es incluso peor que la anterior
y seguimos aún sin solucionar nuestro problema.

Posible Solución 2: Usando vectores o matrices (correcta):


¡Pues bien!, tal y como mencioné antes, los arrays o los vectores han venido para
ayudarnos en múltiples circunstancia similares a esta. Dado que un array, arreglo o
vector es capaz de almacenar múltiples valores en una misma variable, tenemos el
elemento perfecto para almacenar la información de todos los libros, podremos crear un
vector de un tamaño cualquiera capaz de contener en sí los nombres de los autores y
otro con los títulos de los libros o alternativamente podríamos crear una matriz de dos
columnas que contenga en la primera columna los autores y en la segunda los títulos;
ambas soluciones son válidas y vamos a ver ambas, usando vectores en esta sección
y usando matrices en la sección de matrices.

Nota: En C++, a diferencia de algunos otros lenguajes de programación, los vectores y


las matrices presentan un "inconveniente" con el tamaño. Es decir, no es posible crear
de una manera sencilla un vector capaz de almacenar una cantidad de información
indefinida, es necesario ingresar con antelación la cantidad de datos (tamaño) que el
vector o la matriz tendrá. Este problema se puede solucionar, pero es algo que no
veremos en esta sección. Si buscas cómo crear vectores de tamaño dinámico o matrices
de tamaño dinámico, te recomiendo ver la sección de Punteros en C++.

CADENAS
Las cadenas de caracteres se definen como un arreglo de datos de tipo caracter el cual
termina con el carcter nulo.
Un arreglo es un grupo de datos homogéneos y finitos que ocupan posiciones
consecutivas de memoria.

La declaración de una cadena de caracteres se hace de la siguiente forma:


char Nombre_de_la_variable [longitud de la cadena];
Esto hace que se guarde un espacio en memoria suficiente para soportar el número de
caracteres que se están apartando para la cadena de caracteres que se va a leer.

Por ejemplo:

char cadena[10];

Crea un espacio en memoria para 10 bytes cada uno de los cuales será ocupado por
uno de los caracteres que se van a leer.

Lectura de una cadena de caracteres:

Para hacer la lectura de una cadena de caracteres se pueden utilizar la función scanf o
gets de la siguiente forma:

scanf("%s",cadena); o gets(cadena);
Curso: Borland C++ L.M.V. 4-6 pm.

La ventaja de utilizar el gets en lugar del scanf es la lectura de los espacios en blanco,
cosa que no hace el scanf.

Otra forma de leer una cadena de caracteres es hacerlo caracter por caracter como un
arreglo unidimensional o vector, manejándola posición por posición cadena
[posición], más adelante se verá un ejemplo de lo antes mencionado.

Cadena de texto:

Es un arreglo de characteres, e.g. char cadena[12];


 Excepción: Por comodidad, la constante tipo cadena es la única constante TDD
que soporta C, en vez de char x[]={'H','i','\0'}; se usa char x[]="Hi";
 Fin-de-cadena (eos): El tamaño del arreglo, i.e. cadena, debe considerar un
espacio adicional al final del arreglo para colocar un eos, i.e. caracter '\0'
 Librería Cadenas string.h: Dado que no existen operadores para arreglos y
cadenas, existe la librería <string.h> para copiar, comparar y procesar cadenas en
general.

Tabla 1. Algunas funciones para cadenas de la librería estándard <string.h>

Función Descripción

Regresa tamaño cadena, i.e. no. caracteres antes


strlen(s)
de eos

memset(s,c,n) Llena cadena s con n caracteres c

strlwr(s) Regresa cadena convertida a minúsculas

strupr(s) Regresa cadena convertida a MAYUSCULAS

strcpy(s1,s2) Copia cadena s1 en s2, e.g. s1 = s2

strdup(s) Regresa copia cadena s, e.g. s1 = s

strcat(s1,s2) Concatena cadenas e.g. s1 = s1 + s2

Regresa cero si s1 es igual a s2,


strcmp(s1,s2)
positivo o negativo si s1 es mayor o menor

strchr(s,c) Busca un caracter dentro de una cadena

strstr(s1,s2) Busca una cadena dentro de otra cadena

stdio.h: similar a printf, envia resutaldo a


sprintf(s,fmt,..)
cadena s
Curso: Borland C++ L.M.V. 4-6 pm.

MATRICES
Es un arreglo de dos dimensiones.
Son estructuras de datos que agrupan muchos datos del mismo tipo, en donde cada
elemento se puede trabajar individualmente y se puede referenciar con un mismo
nombre. Se usan para representar datos que pueden verse como una tabla con filas y
columnas.
 Declaración:
Tipo_dato nombre_matriz [índice fila] [índice columna]

 Uso:

Nombre_matriz [subíndice1] [subíndice2]

int matriz [2][2]

char mapa [100][100]

int certamen [60][4]

Declara una matriz de 3 filas por 4 columnas:

int matriz [3][4];

 Declaración e iniciación:

int matriz [2][2]={1,2,3,4}


1 2

Para referenciar un elemento de la matriz, debe darse un nombre de la matriz y el índice


de la fila y de la columna que el elemento ocupa en dicha matriz. Es importante que los
índices de las matrices tanto de las filas como de las columnas empiezan en 0 y terminan
en tamaño fila-1 y tamaño columna-1 respectivamente.

A las matrices se le asignan automáticamente valores iniciales predeterminados a cada


uno de sus elementos, de acuerdo a los siguientes criterios:

 Si el tipo del arreglo es numérico, a sus elementos se les asigna el valor cero.
 Si el tipo del arreglo es char, a sus elementos se les asigna el valor ‘\u0000’.
 Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false.
 Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.

Ejemplo:
#include <stdio.h>
int main()
{
int fila, columna;
int matriz[2][2];
for(fila=0; fila<2; fila++)
for(columna=0; columna<2; columna++)
printf(“%d”, matriz[fila][columna]);
return 0;
}
Curso: Borland C++ L.M.V. 4-6 pm.

Potrebbero piacerti anche