Vida Nueva
COMPENDIO DE
ESTRUCTURA DE DATOS
4 CREDITOS
1. Datos informativos:
Carrera/s Nivel
Informática SEGUNDO
www.istvidanueva.edu.ec
Tecnológico Vida Nueva http://www.istvidanueva.edu.ec/aulavirtual
1
2. Índice
1. Datos informativos: .................................................................... 1
2. Índice......................................................................................... 2
3. Introducción ............................................................................... 7
4. Prerrequisitos ............................................................................ 8
Objetivos ................................................................................. 10
Contenidos .............................................................................. 10
1.1. Generalidades y definiciones de la memoria ............................. 10
Evaluación ............................................................................... 22
Recursos ................................................................................. 24
Objetivos ................................................................................. 25
Contenidos .............................................................................. 25
2.1. Definición................................................................................... 25
Evaluación ............................................................................... 37
Recursos ................................................................................. 38
Objetivos ................................................................................. 39
Contenidos .............................................................................. 39
3.1. Definición de punteros ............................................................... 39
Evaluación ............................................................................... 47
Recursos ................................................................................. 48
Objetivos ................................................................................. 49
Contenidos .............................................................................. 49
4.1. Definición de listas .................................................................... 49
Evaluación ............................................................................... 56
Recursos ................................................................................. 56
Objetivos ................................................................................. 57
Contenidos .............................................................................. 57
5.1. Definición de pilas ..................................................................... 57
Evaluación ............................................................................... 61
Recursos ................................................................................. 61
Objetivos ................................................................................. 62
Contenidos .............................................................................. 62
6.1. Definición de colas .................................................................... 62
Recursos ................................................................................. 66
Objetivos ................................................................................. 67
Contenidos .............................................................................. 67
7.1. Definición de listas .................................................................... 67
Evaluación ............................................................................... 71
Recursos ................................................................................. 71
Objetivos ................................................................................. 72
Contenidos .............................................................................. 72
8.1. Definición de listas .................................................................... 72
Evaluación ............................................................................... 79
Recursos ................................................................................. 79
9. Bibliografía .............................................................................. 81
3. Introducción
Como ya sabemos, las computadoras fueron diseñadas o ideadas
como una herramienta mediante la cual podemos realizar
operaciones de cálculo complicadas en un lapso de mínimo tiempo.
Pero la mayoría de las aplicaciones de este fantástico invento del
hombre, son las de almacenamiento y acceso de grandes
cantidades de información.
5. Evaluación inicial
1. ¿Cuál es la función de un Diagrama de Flujo?
_________________________________________________
_________________________________________________
_________________________________________________
2. Señale 2 tipos de datos que utiliza en el lenguaje c
_________________________________________________
_________________________________________________
_________________________________________________
3. ¿Cuál es la función de los operadores lógicos?
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
4. Indique 2 operadores de asignación y su función
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
5. ¿Qué es una estructura de datos?
_________________________________________________
_________________________________________________
7. Desarrollo de contenidos
I. Unidad: NOCIONES FUNDAMENTALES
Objetivos
Analizar y explicar cada uno de los puntos necesarios e importantes
para comenzar con el desarrollo de la lógica de programación.
Contenidos
Ej:
int *puntero;
char *puntcarc;
puntero=(int *)malloc(4);
puntcarc=(char *)malloc(200);
calloc
La función calloc funciona de modo similar a malloc, pero además
de reservar memoria, inicializa a 0 la memoria reservada. Se usa
comúnmente para arreglos y matrices. Está definida de esta forma:
int *vect1, n;
if (vect1 == NULL) {
realloc
La función realloc redimensiona el espacio asignado de forma
dinámica anteriormente a un puntero. Tiene la siguiente definición:
/* Reservamos 5 bytes */
if (tmp_ptr == NULL) {
else {
ptr = tmp_ptr;
free
La función free sirve para liberar memoria que se asignó
dinámicamente. Si el puntero es nulo, free no hace nada. Tiene la
siguiente definición:
int *i;
i = malloc(sizeof(int));
free(i);
int *i = malloc(sizeof(int));
free(i);
i = malloc(2 * sizeof(int));
free(i);
Memoria dinámica
Es memoria que se reserva en tiempo de ejecución. Su principal
ventaja frente a la estática, es que su tamaño puede variar durante
la ejecución del programa. (En C, el programador es encargado de
liberar esta memoria cuando no la utilice más). El uso de memoria
dinámica es necesario cuando a priori no conocemos el número de
datos/elementos a tratar.
VARIABLES
Una variable puede verse simplemente como un hueco en el que se
puede almacenar un objeto de un determinado tipo al que se le da
un cierto nombre. Para poderla utilizar sólo hay que definirla
indicando cuál era su nombre y cuál será el tipo de datos que podrá
almacenar, lo que se hace siguiendo la siguiente sintaxis:
<tipoVariable> <nombreVariable>;
Ejemplo:
int numero;
Tipos
de Descripción Memoria
Datos
2 bytes o una
int Cantidad entera palabra (varía
según compilador).
int *ptrX;
ptrX = &X;
//DECLARACIÓN EN C++
struct nodo {
int dato;
};
//REPRESENTACIÓN GRÁFICA
struct mystruct
double double_member;
char string_member[25];
} variable;
Datos estructurados:
Estructura de Datos es una colección de datos que se caracterizan
por su organización y las operaciones que se definen en ella. Los
Evaluación
1. ¿Qué representa la librería malloc?
_________________________________________________
_________________________________________________
_________________________________________________
2. ¿Cuál es la sintaxis de la función free?
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
Recursos
• Módulo de Instrucción
• Internet
• Moodle
Objetivos
Identificar una estructura de datos y sus partes como registro de
datos.
Contenidos
2.1. Definición
En programación, una estructura de datos es una forma de
organizar un conjunto de datos elementales con el objetivo de
facilitar su manipulación. Un dato elemental es la mínima
información que se tiene en un sistema.
tipo miembro1;
tipo miembro2;
...
Ejemplos:
struct fecha {
int día;
int año;
}; /* estructura fecha */
struct cuenta {
int cuen_no;
char cuen_tipo;
float saldo;
amigo.edad=27;
persona2=persona1;
//: C04:Stack.h
#define STACK_H
struct Stack {
struct Link {
void* data;
Link* next;
}* head;
void initialize();
void* peek();
void* pop();
void cleanup();
};
#include "Stack.h"
#include "../require.h"
void
data = dat;
next = nxt;
newLink->initialize(dat, head);
head = newLink;
void* Stack::peek() {
return head->data;
void* Stack::pop() {
if(head == 0) return 0;
head = head->next;
delete oldHead;
return result;
void Stack::cleanup() {
} ///:~
//: C04:StackTest.cpp
//{L} Stack
//{T} StackTest.cpp
#include "Stack.h"
#include "../require.h"
#include <fstream>
#include <iostream>
#include <string>
ifstream in(argv[1]);
assure(in, argv[1]);
Stack textlines;
Tecnológico Vida Nueva Página 33
ESTRUCTURA DE DATOS
Error! Use the Home tab to apply Título 2 to the text that you want to
appear here.
textlines.initialize();
string line;
while(getline(in, line))
textlines.push(new string(line));
string* s;
while((s = (string*)textlines.pop()) != 0) {
delete s;
textlines.cleanup();
} ///:~
//: C04:Scoperes.cpp
int a;
void f() {}
struct S { int a;
void f();};
Recursos
• Módulo de instrucción
• Moodle
• Internet
Objetivos
Aplicar un puntero de forma efectiva dentro de un proceso de
programación.
Contenidos
#include <iostream.h>
main()
int vector[3];
vector[2] = 15;
if (princPunt == finPunt)
15 15
Número de elementos 2
struct Item {
};
if (Item == NULL)
return NULL;
Item->id = -1;
Item->name = NULL;
Item->cost = 0.0;
if (Item->name == NULL) {
free(Item);
return NULL;
strcpy(Item->name, name);
return Item;
if (item == NULL)
return;
if (item->name != NULL) {
free(item->name);
free(item);
//liberamos memoria
Fflush(stdin);
3.7.1. Ventajas
Ofrecen potencia y la flexibilidad en C.
3.7.2. Desventajas
No es posible en otros lenguajes.
Evaluación
1. ¿Defina, qué es un puntero?
______________________________________________________
______________________________________________________
______________________________________________________
_____________________________________________________
2. Ponga un ejemplo de declaración y asignación de un
puntero.
______________________________________________________
______________________________________________________
______________________________________________________
______________________________________________________
_____________________________________________________
3. Indique la función que permite realizar liberación de memoria
en c.
______________________________________________________
______________________________________________________
______________________________________________________
_____________________________________________________
4. ¿Qué función cumple la sentencia NULL?
______________________________________________________
______________________________________________________
Tecnológico Vida Nueva Página 47
ESTRUCTURA DE DATOS
Error! Use the Home tab to apply Título 2 to the text that you want to
appear here.
______________________________________________________
_____________________________________________________
5. Indique 2 ventajas del uso de punteros
______________________________________________________
______________________________________________________
______________________________________________________
_____________________________________________________
6. Indique 2 desventajas del uso de punteros
______________________________________________________
______________________________________________________
______________________________________________________
_____________________________________________________
Recursos
• Módulo de instrucción
• Moodle
• Internet
Objetivos
Definir y conocer cada uno de los códigos que permiten realizar una
estructura de pila en C++.
Contenidos
struct nodo {
int dato;
};
Lista vacía
Lista vacía
Por ejemplo, para mostrar todos los valores de los nodos de una
lista, podemos usar el siguiente bucle en C:
int dato;
} tipoNodo;
...
pNodo indice;
...
indice = Lista;
while(indice) {
printf("%d\n", indice->dato);
indice = indice->siguiente;
indice = Lista;
printf("%d\n", indice->dato);
indice = indice->siguiente;
Evaluación
Realizar el siguiente menú de Pilas:
2. Imprimir Pila
7. Salir
Recursos
• Módulo de instrucción
• Moodle
• Internet
V. Unidad: PILAS
Objetivos
Definir y conocer cada uno de los códigos que permiten realizar una
estructura de pila en c++.
Contenidos
Declaración de la Pila
La declaración de la Pila lo hacemos seguido de la palabra struct:
struct nombre_pila{
tipo_dato campo1;
//Declaramos la pila
struct pila{
int num;
};
void main()
ultimo=nuevo;
ultimo->apunt=NULL;
scanf(“%d”,&nuevo->num);
nuevo->apunt=ultimo;
ultimo=nuevo;
scanf(“%d”,&nuevo->num);
recorre=ultimo;
while(recorre!=NULL){
printf(“%d”,recorre->num);
recorre=recorre->apunt;
recorre=primero;
while(recorre!=NULL){
cont++;
if(num==recorre->n)
printf("\n\tNodo %d : %d",cont,recorre->n);
aux=1;
break;
recorre=recorre->apun;
if(aux==0)
printf("\n\tDato no Existe");
Recursos
• Módulo de instrucción
• Moodle
• Internet
Objetivos
Definir y conocer cada uno de los códigos que permiten realizar una
estructura de cola en C++.
Contenidos
Este tipo de lista es conocido como lista FIFO (First In First Out),
el primero en entrar es el primero en salir.
int dato;
//Declaramos la pila
struct cola{
int num;
};
void main()
ultimo=nuevo;
ultimo->apunt=NULL;
scanf(“%d”,&nuevo->num);
nuevo->apunt=ultimo;
ultimo=nuevo;
scanf(“%d”,&nuevo->num);
clrscr();
recorre=primero;
while(recorre!=NULL)
cont++;
printf("\n\tNodo %d : %d",cont,recorre->n);
recorre=recorre->apun;
int cont=0,num,aux=0;
clrscr();
recorre=primero;
while(recorre!=NULL)
cont++;
printf("\n\tNodo %d : %d",cont,recorre->n);
aux=1;
break;
recorre=recorre->apun;
if(aux==0)
printf("\n\tDato no Existe");
Recursos
• Módulo de instrucción
• Moodle
• Internet
Objetivos
Estudiar el proceso de creación y recorrido de una lista circular en
C++
Contenidos
struct nodo {
int dato;
};
gint i = 0;
Evaluación
Realizar el siguiente menú de Listas Circulares:
Recursos
• Módulo de instrucción
• Moodle
• Internet
Objetivos
Conceptualizar y conocer cada uno de los pasos al construir y
recorrer una lista cerrada
Contenidos
struct nodo {
int dato;
};
int dato;
} tipoNodo;
El proceso es el siguiente:
El proceso es simple:
1. Eliminamos el nodo.
2. Hacemos que Lista apunte a NULL.
Por ejemplo, para mostrar todos los valores de los nodos de una
lista, podemos usar el siguiente bucle en C:
int dato;
} tipoNodo;
...
pNodo = indice;
...
indice = Lista;
while(indice) {
printf("%d\n", indice->dato);
indice = indice->siguiente;
Evaluación
Realizar el siguiente menú de Listas Doblemente Enlazadas:
Recursos
• Módulo de instrucción
• Moodle
• Internet
8. Evaluación final
Tomando cualquiera de los tipos de estructuras estudiadas sean
estas pilas, colas, listas, simples, dobles o doblemente enlazadas
realizar el siguiente menú de la siguiente estructura:
struct nombre_estuctura{
1. Crear
2. Imprimir
3. Insertar
3.1. Insertar al Inicio
3.2. Insertar al Final
3.3. Insertar en el Intermedio
3.4. Insertar en cualquier Posición
4. Eliminar
4.1. Eliminar al Inicio
4.2. Eliminar al Final
4.3. Eliminar en el Intermedio
4.4. Eliminar Cualquier Elemento
5. Salir
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_din%C3%A1
mico_de_memoria#Memoria_din.C3.A1mica
http://tutorialms-dos.bligoo.com/lenguaje-c-estructuras-de-datos-y-declaracion-
de-variables
http://www.pablin.com.ar/computer/cursos/c1/operations.html
http://www.monografias.com/trabajos10/esda/esda.shtml#li
http://c.conclase.net/edd/?cap=005c#5_6
10. Anexos
Difícil es seguirlas...
Difícil es levantarte...
Alias: porque un dato puede recibir varios nombres, dependiendo de quién uso
este dato.
Valores de los datos: porque en algunos procesos solo son permitidos valores
muy específicos para los datos. Si los valores de los datos están restringidos a
un intervalo especifico, esto debe estar en la entrada del diccionario.
2016-2016