Estructura de datos (Parte 4)

Estructuras de datos 

Es una forma particular de organizar datos en una computadora para que puedan ser utilizados de manera eficiente. Diferentes tipos de estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunos son altamente especializados para tareas específicas.

Las estructuras de datos son un medio para manejar grandes cantidades de datos de manera eficiente para usos tales como grandes bases de datos y servicios de indización de Internet. Por lo general, las estructuras de datos eficientes son clave para diseñar algoritmos eficientes. Algunos métodos formales de diseño y lenguajes de programación destacan las estructuras de datos, en lugar de los algoritmos, como el factor clave de organización en el diseño de software.


Arreglos 

Un arreglo o array es básicamente una estructura de datos almacenada como una sola variable. Hasta el momento habíamos visto variables y constantes, pero en este caso es una estructura algo más compleja, ya que se compone de varios elementos de un mismo tipo. Por ejemplo, podía ser una lista finita de números o de palabras que se almacenarían en celdas contiguas de memoria.

Cada uno de esos elementos se distinguen por un índice o subíndice al que se puede apuntar con un puntero para acceder a dicha posición del array. Además, también se podría escribir código para acceder de forma aleatoria a estos elementos de los que se compone el arreglo.

Ejemplo. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en orden ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,tabla[100];
           
            for (x=1;x<=100;x++)
            {
        tabla[x]=x;
    }
           
            for (x=1;x<=100;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

Estructuras 

La estructura es una colección de variables, la cual puede poseer distintos tipos de datos (a diferencia de los arreglos que solamente pueden tener un solo tipo de dato). Es un tipo de dato definido por el usuario. Son también conocidas como Registros. Ayudan a organizar y manejar datos complicados en programas debido a que agrupan diferentes tipos de datos a los que se los trata como una sola unidad en lugar de ser vistas como unidades separadas. La declaración de estructuras en programas C, es un nuevo tipo de datos denominado tipo Estructura y es posible declarar una variable de este tipo una vez que declare o defina el tipo estructura de la siguiente manera:

Struct Identificador_ tipo_estructura 

 { Tipo miembro_1; /*Declaración de los miembros*/ 

 …. 

 Tipo miembro_n; 

 };

Ejemplo. Hacer una estructura en C que registre los datos de cinco personas como: Nombre, apellido, edad, sexo y teléfono.

#include <iostream>

using namespace std;

 

struct persona{

        char nombre[15];

        char apellido[15];

        int edad;

        char sexo[15];

        int telefono;

};

int main(){

    persona amigo[5];

    for (int i = 0; i < 5; i++){

        cout <<"Escriba el Nombre "<<i+1<<":";

        cin >> amigo[i].nombre;

        cout <<"\nEscriba el Apellido "<<i+1<<":";

        cin >> amigo[i].apellido;

        cout <<"\nEscriba la Edad de "<<i+1<<":";

        cin >> amigo[i].edad;

        cout <<"\nEscriba el sexo "<<i+1<<":";

        cin >> amigo[i].sexo;

        cout <<"\nEscriba el Telefono de "<<i+1<<":";

        cin >> amigo[i].telefono;

        cout <<endl;

    }

    cout<<"El registro de personas que se introdujeron es: \n\n";

    for (int i = 0; i < 5; i++){

        cout<<"\t"<<amigo[i].nombre;

        cout<<"\t"<<amigo[i].apellido;

        cout<<"\t"<<amigo[i].edad;

        cout<<"\t"<<amigo[i].sexo;

        cout<<"\t"<<amigo[i].telefono<<"\n\n";

   }

   return 0;

}

Listas 


una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y una o dos referencias, enlaces o punteros al nodo anterior o posterior. El principal beneficio de las listas enlazadas respecto a los vectores convencionales es que el orden de los elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.

Una lista enlazada es un tipo de dato autorreferenciado porque contienen un puntero o enlace  a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminación de nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto está previamente identificado o localizado), pero no permiten un acceso aleatorio.


Ejemplo. El siguiente código es para que ingreses números, eligiendo la opción en un menú


y mientras ingresas, puedes elegir ver la lista como se ve. Sigue leyendo después del código.
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
struct nodo{
int info;
nodo *sgt;
};
void agrega(nodo **cab, nodo **fin);
void muestra(nodo *cab);
int main()
{ nodo *c=NULL,*f=NULL;  //puntero de cabecera, y puntero de fin de lista
  int opcion;
   do{
   system("cls");
   cout<<"1) Ingresa un dato (numero entero)."<<endl;
   cout<<"2) Muestra los datos ingresados."<<endl;
  cout<<"ingrese opcion"<<endl;
  cin>>opcion;
  switch(opcion){
  case 0: exit(0);break;
  case 1: agrega(&c, &f);break;
  case 2: muestra(c);break;
  }
  }
  while(opcion!=0);
      system("PAUSE");
      return 0;
}
void agrega(nodo **cab, nodo **fin){
int num;
cout<<"ingrese informacion"<<endl;
cin>>num;
if((*cab)==NULL){
*cab = new nodo;
(*cab)->info =num;
(*cab)->sgt=NULL;
(*fin)=(*cab);
}else{
(*fin)->sgt=new nodo;
(*fin)->sgt->info=num;
(*fin)=(*fin)->sgt;
(*fin)->sgt=NULL;
}
}
void muestra(nodo *cab){
cout<<"elementos en la lista"<<endl;
nodo* temp;
temp=cab;
while ( temp != NULL){
cout<<temp->info<<"   ";
temp=temp->sgt;
}
getche();
}






Comentarios