Está en la página 1de 14

Pequeña introducción sobre estructura de datos en C

Aprende a programar en C, uno de los lenguajes de programación más usados.


En este curso, adquirirás los conocimientos necesarios para comenzar a
convertirte en un experto en C.
Una computadora es una máquina que manipula la información. Un curso de
ciencias de la computación incluye el estudio de cómo se organiza la
información en una computadora, como se manipula y como se emplea, por lo
tanto, es sumamente importante que un estudiante de ciencias de la
computación comprenda los conceptos de organización y manipulación de la
información para continuar sus estudios en este campo.
Le ofrecemos un resumen de las estructuras, donde explicamos para que se
usan, ¿Qué es?, importancia, tipos de estructura de datos y ejemplos de
códigos.

¿Qué es una estructura de datos en C?

En programación una estructura de datos son un modo de representar


información en una computadora, aunque, además, cuentan con un
comportamiento interno. ¿Qué significa? Que se rige por determinadas
reglas/restricciones que han sido dadas por formar en que está construida
internamente.
Las estructuras en C permiten almacenar diferentes tipos de datos a diferencia
por ejemplo de los arrays que solamente pueden contener conjuntos de un tipo
de dato. Además, las estructuras son precursoras de un tipo más avanzado de
dato denominado clase en C++.

En C++ es un grupo de objetos en el que se identifica a cada uno mediante su propio


identificador, cada uno de los cuales se conoce como miembro de la estructura. En
muchos otros lenguajes de programación se llama “Registro” (Record).

Las estructuras son tipos de datos derivados, están construidas utilizando


objetos de otros tipos. Considere la siguiente definición de estructura:

struct ejemplo {char c; int i;};


Struct indica que se está definiendo una estructura. El identificador de ejemplo
reservada es el nombre de la estructura. Las variables declaradas dentro de las
llaves de la definición de estructura son los miembros de la estructura.
Los miembros de la misma estructura deben tener nombres únicos mientras
que dos estructuras diferentes pueden tener miembros con el mismo nombre.
Cada definición de estructura debe terminar con un punto y coma.

La definición de struct ejemplo contiene un miembro de tipo char y otro de tipo


int. Los miembros de una estructura pueden ser variables de los tipos de datos
básicos (int, char, float, etc) o agregados como ser arreglos y otras
estructuras.
Una estructura no puede contener una instancia de sí misma. Declaramos
variables del tipo estructura del siguiente modo: struct ejemplo e1, a[10]; o
alternativamente sin usar la palabra struct:
ejemplo e1, a[10];

Las declaraciones anteriores declaran variables e1 de tipo ejemplo y a de tipo


arreglo de ejemplo de dimensión 10.
Se pueden declarar variables de tipo estructura ejemplo colocando sus
nombres a continuación de la llave de cierre de la definición de estructura y el
punto y coma, en el caso anterior:
struct ejemplo { char c; int i;} e1, a[10];
Una operación valida entre estructuras es asignar variables de estructura a
variables de estructura del mismo tipo. Las estructuras no pueden compararse
entre sí.

Ejemplo
Consideremos la información de una fecha. Una fecha consiste de: el día, el
mes, el año y posiblemente el día en el año y el nombre del mes. Declaramos
toda esa información en una estructura del siguiente modo:

struct fecha {int día; int mes; int año; int día del año;
char nombre mes [9];

};
¿Cómo inicializar estructuras?

Las estructuras pueden ser inicializadas mediante listas de inicialización como


con los arreglos. Para inicializar una estructura escriba en la declaración de la
variable a continuación del nombre de la variable un signo igual con los
inicializadores entre llaves y separados por coma, por ejemplo:
ejemplo e1 = { ’a’, 10 };

Si en la lista aparecen menos inicializadores que en la estructura los miembros


restantes son automáticamente inicializados a 0.
Las variables de estructura también pueden ser inicializadas en enunciados de
asignación, asignándoles una variable del mismo tipo o asignándole valores a
los miembros individuales de la estructura.
Podemos inicializar una variable del tipo fecha como sigue:
struct fecha f = {4, 7, 1776, 186,” Julio”};

¿Cómo tener acceso a los miembros de estructuras?

Para tener acceso a miembros de estructuras utilizamos el operador punto. El


operador punto se utiliza colocando el nombre de la variable de tipo estructura
seguido de un punto y seguido del nombre del miembro de la estructura. Por
ejemplo, para imprimir el miembro c de tipo char de la estructura e1 utilizamos
el enunciado:
printf (” %c, e1.c);
Para acceder al miembro i de la estructura e1 escribimos: e1. i
En general, un miembro de una estructura particular es referenciada por una
construcción de la forma:
nombre de estructura. Miembro por ejemplo para chequear el nombre de mes
podemos utilizar: if (strcmp (d. nombre mes, “Agosto”) ==0) ….
¿Cómo utilizar estructuras con funciones?

Las estructuras pueden ser pasadas a funciones pasando miembros de


estructura individuales o pasando toda la estructura.
Cuando se pasan estructuras o miembros individuales de estructura a una
función se pasan por llamada por valor. Para pasar una estructura en llamada
por referencia tenemos que colocar el’*’ o’&’.
Los arreglos de estructura como todos los demás arreglos son
automáticamente pasados en llamadas por referencia.
Si quisiéramos pasar un arreglo en llamada por valor, podemos definir una
estructura con único miembro el array.
Una función puede devolver una estructura como valor.

Ejemplo
Consideraremos el ejemplo de un punto dado por dos coordenadas enteras.

struct punto { int x; int y;};


/* creo punto: crea un punto a partir de sus coordenadas */ punto creo
punto(int a, int b)
{ punto temp;
temp.x=a; temp. y=b; return temp;
}
/* sumo puntos: suma dos puntos */ punto sumo puntos (punto p1, punto
p2)
{p1.x += p2.x; p1. y += p2. y; return p1;
}
/* imprimo punto: imprime las coordenadas de un punto */ void imprimo
punto (punto p)
{printf (“Coordenadas del punto: %d y%d \n”, p.x, p.y);
}
¿Por qué es importante conocerlas?

Cuando iniciamos en el mundo de programación y te metes en el mundo de


JavaScript, C++, Python etc… las estructuras de datos son fundamentales.
Conocer sobre listas, árboles y grafos te permitirá organizar mejor la
información y crear códigos más eficientes. Además, es clave para mejorar tus
habilidades técnicas y enfrentarte con éxito en tus futuras entrevistas laborales.

Las estructuras de datos son útiles porque


nos permiten tener una batería de
herramientas para solucionar ciertos tipos
de problemas.

¿Para qué sirven las estructuras de datos?

En la informática estas estructuras son aquellas que


nos permiten, como desarrolladores, organizar
la información de manera eficiente, y, en definitiva
diseñar la solución correcta para un determinado problema.
Nos permiten trabajar en un nivel de abstracción almacenando
información para luego acceder a ella, modificarla y manipularla.

Nos permiten hacer un software más eficiente optimizando recursos,


algo muy útil para LOT y para los entornos que trabajan en big data.
APLICACIÓN DEL TIPO STRUCT

Un ejemplo de cómo aplicar un struct es (ficha de estudiante):


Nuestro objetivo es reproducir los apartados o campos que se hallan en la ficha
de un alumno. Tomemos nota de los campos más habituales
 Apellidos
 Nombre
 Dirección local
 Dirección familiar
 Nacionalidad
 Curso
 Grupo
 Año académico
 Calificaciones
 Comentarios
A su vez, las Direcciones se subdividen en Calle, Número, Piso o planta,
Puerta, Localidad, Provincia, Código postal y Estado. Las Calificaciones suelen
estar formadas por dos columnas al menos, una para la fecha y otra para la
calificación en sí. Por último, el comentario es un bloque de texto sin más
estructura. A la vista de esto, cabe pensar en la necesidad de crear una
estructura para Direcciones y otra para Calificaciones; la ficha del alumno
contendrá posiblemente más de un campo de este tipo. La implementación de
estas estructuras de datos puede entonces ser como la que se ve a
continuación.
Struct Dirección {/* Obsérvese la ausencia de acentos */
Char calle [40];
Char numero [5];
Char piso [5];
Char puerta [4];
Char localidad [40];
Char provincia [15];
Char cod_postal [12];
Char estado [20];}; /* No definimos variables de este tipo */

Struct Calificación {/* De nuevo sin acentos */


Char fecha[20];
Float nota;};

Uso del struct

Al igual que para C, para C++ struct es la palabra clave que indica al
compilador que se va a definir una estructura.
Para su definición, tal como dijimos en la página anterior hay que dar un
nombre identificador a la estructura, y en lista de variables que vayan a estar
agrupadas en las estructuras tal como se muestra a continuación.
Ejemplo:

struct Complex_t {
double r;
double i;
};

Struct como parámetros

Al definir un struct puede utilizarse también como tipo de los parámetros de una
función, tanto para la cabecera, como para la definición de la variable.

int magnitude(Complex_t);

/* Main */
// ...

int magnitude (Complex_t complex) {

...
Referencias de Structs

Al igual que con otros tipos, se pueden realizar referencias a struct que
tendrían el mismo acceso y uso que los alias a otros tipos.

Complex_t &ref_complex = complex;


ref_complex. r = 1;
ref_complex. i = 1;

cout<<complex. r; // 1
cout<<complex. i; // 1

Colecciones de Structs

También se pueden generar arrays y vectores de structs indicando el nombre


del tipo en la declaración de dicho array o struct.

Complex_t complex_array [10]; // Array of 10 complex numbers


vector<Complex_t> complex_vector; // Vector of complex numbers

Escritura y lectura de los miembros

Esta estructura de complex tiene dos miembros real e imag, con tipo double en
ambos casos. De esta manera si nosotros queremos declarar el número
complejo 1+1i lo haríamos como se expone en el código siguiente:

Complex_t complex;
complex. r = 1;
complex. i = 1;

Pudiendo acceder a cada uno de los miembros mediante notación doteada:

cout << complex. r; // 1


cout << complex. i; // 1

Structs de Structs

Por último, los structs permiten también agrupar miembros que sean a su vez
structs. Pongamos el siguiente ejemplo.

Una lista enlazada, es una estructura de datos donde cada elemento de la lista
está conectado al siguiente, de tal manera, que, para recorrerla, deberemos
empezar por el primer elemento hasta que ya no queden más. La siguiente
estructura expondría los miembros que tendría que tener un struct que
represente un elemento.

struct Element_t {
int value;
Element_t *next;
};

También podríamos representar la estructura lista como un grupo de punteros


al primer, y al último elemento.

struct LinkedList_t {
Element_t *first;
Element_t *last;
};
¿Cuáles son los tipos de estructuras de datos?

Un tipo de estructura es un tipo compuesto definido por el usuario. Se compone


de campos o de miembros que pueden tener diferentes tipos.
En C++, una estructura es igual que una clase salvo que sus miembros son
public de forma predeterminada.
Cada tipo de estructura dependerá del tipo de aplicación que se requiera. Una
típica dentro de las estructuras de datos estáticas son los arrays:

Una estructura estática; Un array es un tipo de dato estructurado que


son aquellas en las que el Permite almacenar un conjunto de datos
tamaño ocupado en
homogéneo
memoria se define antes
de que el programa se y ordenado, es decir, todos ellos del mismo tipo y
ejecute y no pueda
relacionados.
modificarse dicho
tamaño durante la
ejecución del programa. Su condición de homogéneo, Su condición de ordenado
indica que sus elementos están hace que se pueda identificar
compuestos por el mismo tipo del primer al último elemento
de dato. que lo compone.

Estructura de datos dinámicas es una colección de elementos/nodos que


normalmente se utilizan para dejar asentados registros. A diferencia de un
array que contiene espacio para almacenar un número fijo de elementos, una
estructura dinámica de datos se amplia y contrae durante la ejecución del
programa. Veamos algunos casos;

Estructura de datos lineales

Son aquellas en las que los elementos ocupan lugares sucesivos en la


estructura y cada uno de ellos tiene un único sucesor y un único predecesor, es
decir, sus elementos están ubicados uno al lado del otro relacionados en forma
lineal.

Hay tres tipos de estructuras de datos lineales;


1) listas enlazadas

2) pilas

3) Colas

Estructura de datos no lineales

También llamadas multienlazadas, son aquellas en las que cada elemento


puede estar enlazada o cualquier otro componente. Es decir, cada elemento
puede tener varios sucesores o varios predecesores.
Existen dos tipos;

1) Arboles

2) Grafos
Uso de la estructura

En C, debe utilizar explícitamente la palabra clave struct para declarar una


estructura. En C++, no es necesario usar la palabra clave struct una vez
definido el tipo.
Tiene la opción de declarar variables al definir el tipo de estructura, para lo cual
debe insertar uno o más nombres de variable separados por comas entre la
llave de cierre y el punto y coma.
Las variables de estructura se pueden inicializar. La inicialización de cada
variable se debe incluir entre llaves.

Al ser la estructura más común, las matrices se utilizan prácticamente en todas


las situaciones que implican la organización de datos del mismo tipo; ya sean
datos recibidos por una API o enviados a una base de datos, o incluso pasados
a través de parámetros a una función o método. Los arreglos también pueden
ser multidimensionales, se utiliza siempre que existe la necesidad de tabular
datos y se utilizan matrices (matrices) bidimensionales para el procesamiento
de imágenes.

Característica de las estructuras de datos

Las estructuras de datos pueden ser:

 Lineales; (Arrays) o no lineales (Grafos)


 Homogéneas (todos los datos que componen la estructura son del
mismo tipo) o heterogéneas (pueden contener datos de varios tipos);
 Estáticas (tiene tamaño/capacidad de memoria fija) o dinámicas (pueden
expandir).

Sintaxis de una estructura de datos en C

En C y en C++ se forma una estructura utilizando la palabra struct, seguida por


un campo etiqueta opcional, y luego una lista de miembros dentro de una
estructura. La etiqueta opcional se utiliza para crear otras variables del tipo
particular de la estructura. Ejemplo del código:

struct tipo_nuevo {

tipo var1;
tipo var2;
....
tipo varn;

};

En donde tipo_nuevo es un nuevo tipo de dato creado a partir de los demás


tipos conocidos. Observa el siguiente ejemplo en donde creamos la estructura
car que contiene tres tipos de datos.

int main()
{
struct car {
char producer[15];
char model[15];
int year;

};

struct car ford;


strcpy(ford.producer, "FORD");
strcpy(ford.model, "FIESTA SE");
ford.year = 2016;

printf("The car is a %s %s %d\n", ford.producer, ford.model, ford.year);


return 0;
}

Obtendrás una salida similar a la siguiente:


The car is a FORD FIESTA SE 2016

Como puedes darte cuenta la forma de acceder a cada miembro de la


estructura es mediante el carácter punto utilizando el nombre de la variable
struct y el nombre del tipo miembro. Observa que también hubiera sido posible
declarar la variable de estructura así:

struct car {
char producer[15];
char model[15];
int year;
} ford;

Incluso, es posible omitir la etiqueta de la estructura si solamente vamos a


crear una estructura con esas características.

struct {
char producer[15];
char model[15];
int year;
} ford;

Si quieres aprender más sobre las estructuras de datos, puedes seguir leyendo
este artículo. Espero les sea de gran ayuda.

Existen cientos de Están Java, JavaScript, Python,


lenguajes para los diversos los lenguajes más básicos y
usos de la programación. fáciles para aprender.

También podría gustarte