Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERIA
P. A. P. INGENIERIA DE SISTEMAS E INFORMÁTICA
ESTRUCTURA DE DATOS
CICLO: IV.
HUANUCO - 2022-I
PRESENTACIÓN
Este cuaderno tiene contenido en general acerca del tema de estructura de datos, donde
podemos ir teniendo más conocimientos sobre el tema en sí, empezaremos desde lo más
simple a los más dificultoso teniendo en cuenta dos contenidos que serán llamados como
primera unidad y segunda unidad, donde la primera unidad está basada en conceptos básicos
como, arreglos tanto unidimensionales como bidimensionales, métodos y listas.
La segunda unidad ya viene a ser temas más complejos como conceptos de pilas, conceptos
de colas, ordenamiento y búsqueda de dato abstracto “struc” en el lenguaje de programación,
listas doblemente enlazadas como también pilas y colas con estructuras en c++. Todo esto
llevando a cabo de manera práctica como también de manera teórica lo cual iremos
realizando los problemas y ejercicios de clase más por el lado practico que teórico.
CONTENIDO
PRIMERA UNIDAD
CONCEPTOS BASICOS.
SEGUNDA UNIDAD
CONCEPTOS BASICOS.
Concepto de Pilas con arreglos. Criterios para su diseño y desarrollo.
Concepto de Colas con arreglos. Programas en C++. Criterios para su diseño y
desarrollo.
Estructuras de datos, como tipo de variable. Sintaxis y uso en C++.
Ordenamiento y búsqueda con el uso del tipo de dato abstracto “struct” en el lenguaje
de programación C++.
Listas simples y enlazadas con estructuras. Criterios para su desarrollo en C++.
Listas doblemente enlazadas con estructuras. Criterios para su desarrollo en C++.
Pilas con estructuras y Colas con estructura de datos. en C++.
ESTRUCTURA DE DATOS
EJERCICIOS EN C++
/*P02: Programa que permita ingresar N elementos enteros a un arreglo y que muestre los
elementos con su respectiva raiz cuadrada, solo si son positivos */
#include <iostream>
#include <math.h>
}
//reportar casilla, valor y raiz solo de positivos
system("cls");
cout<<"\n CASILLA \t NUM POSIT \t RAIZ CUAD \n";
for(i=0;i<N;i++)
{
cout<<" A["<<i<<"]: \t\t"<<A[i]<<"\t "<<sqrt(A[i])<<endl;
}
return 0;
}
/*ejem 3: Programa que permita ingresar una frase y muestre la cantidad de caracteres que
tiene dicha frase. Ademas encriptar y desencriptar*/
#include <iostream>
#include <string.h>
unsigned char 8 0 <= X <= 255 Números pequeños y juego caracteres del PC.
char (signed) 8 -128 <= X <= 127 Números muy pequeños y juego de caracteres ASCII [5]
short (signed) 16 -32,768 <= X <= 32,767 Números muy pequeños, control de bucles pequeños
unsigned short 16 0 <= X <= 65,535 Números muy pequeños, control de bucles pequeños
double 64 2.23e-308 <= |X| <= 1.79e308 Precisión científica (15-dígitos)
long double 80 3.37e-4932 <= |X| <= 1.18e4932 Precisión científica (18-dígitos)
TAREA
1) Generar tres arreglos, uno de edades, otro de tallas, otro de letras y el último que reciba
una frase, luego muestre cada dato ingresado.
2) Que ingrese N elementos a un arreglo unidimensional y muestre los elementos desde el
último casillero al primero y además la suma de todos.
3) Que ingrese N elementos a un arreglo unidimensional y que pida un número el cual
multiplicará a cada elemento del arreglo y luego muestre los nuevos elementos.
4) Que ingrese N elementos a un arreglo unidimensional y muestre solo los elementos de
los casilleros impares. Además que imprima la suma de los elementos de los casilleros
impares.
5) Que permita el ingreso de N elementos enteros a un arreglo y saque la raíz cuadrada
sólo de los elementos positivos.
6) Que permita el ingreso de N elementos enteros a un arreglo y determine cuantos son
pares y cuantos son impares.
/*Generar tres arreglos, uno de edades, otro de tallas, otro letras y el último que reciba una
frase, luego muestre cada dato ingresado.*/
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
int main()
{
int nedad=0,ntalla=0,i;
int E[100],N;
float T[100];
char Alum[100][30];
/*******/
//MOSTRANDO DATOS
cout<<"Apellidos y nombres: Edad:\n";
for(i=0;i<N;i++)
{
cout<<Alum[i]<<" "<<E[i]<<endl;
}
/*
//muestra de datos
cout<<"\n las edades ingresadas son:"<<endl;
for (i=0;i<nedad;i++)
{
cout<<" E["<<i<<"] : \t "<<E[i]<<" \t\t "<<endl;
}
cout<<"\n las tallas ingresadas son:"<<endl;
for (i=0;i<ntalla;i++)
{
cout<<" T["<<i<<"] : \t "<<T[i]<<" \t\t "<<endl;
}
cout<<"\n La frase ingresada es: \n";
cout<<F;*/
return 0;
}
4 . Que ingrese N elementos a un arreglo unidimensional y muestre solo los elementos de los
casilleros impares. Además que imprima la suma de los elementos de los casilleros impares.
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int N,SUMIMP,A[100],i;
cout<<"Ingrese cantidad de números: ";
cin>>N;
for(i=0;i<N;i++){
cout<<"A["<<i<<"]: ";
cin>>A[i];
}
SUMIMP=0;
for(i=0;i<N;i++){
if((i%2)!=0)
SUMIMP=SUMIMP+A[i];
}
system("cls");
cout<<" CASILLEROS IMPARES: \n";
for(i=0;i<N;i++){
if((i%2)!=0)
cout<<"A["<<i<<"]"<<"-->"<<A[i]<<endl;
}
return 0;
}
5./* Que permita el ingreso de N elementos enteros a un
arreglo y saque la raíz cuadrada sólo de los elementos positivos
*/
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char** argv) {
int N,i,k,elem[20];
float raiz,R[20];
cout<<"¿Cuantos elementos ingresara?:";
cin>>N;
for(i=0;i<N;i++){
cout<<"N°["<<i<<"]:";
cin>>elem[i];
}
k=0;
for(i=0;i<N;i++){
cout<<"N°["<<i<<"]: Raiz de "<<elem[i]<<" es: ";
if(elem[i]<0){
cout<<"No existe\n";
}else{
raiz=sqrt(elem[i]);
cout<<raiz<<endl;
R[k]=raiz;
k++;
}
}
cout<<"\nMostrando R\n";
for(i=0;i<k;i++){
cout<<"R["<<i<<"]:"<<R[i]<<endl;
}
return 0;
}
ARREGLOS UNIDIMENSIONALES
Son una lista de variables que se hace referencia por medio de un nombre común, para
declarar un arreglo se usa el formato general en una sola dimensión.
EJERCICIOS EN CLASE
#include <iostream>
k=0;
for (i = 0; i < NA; i++)
{
D[k]=A[i];
k++;
}
for (i = 0; i < NB; i++)
{
D[k]=B[i];
k++;
}
for (i = 0; i < NC; i++)
{
D[k]=C[i];
k++;
}
cout<<"\n-------------------------------"<<endl;
ND=NA+NB+NC;
for (i = 0;i < ND; i++)
{
cout<<"D["<<i<<"]: "<<D[i]<<endl;
}
return 0;
}
#include <iostream>
do{
system("cls");
cout<<"*** MENU DE OPCIONES ***\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar cada conjunto *\n";
cout<<"* 3) Union de conjuntos *\n";
cout<<"* 4) Interseccion *\n";
cout<<"* ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- CONJUNTO A -----\n";
cout<<"Cuantos datos ingresará?: ";
cin>>NA;
for(i=0;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
}
cout<<"\n----- CONJUNTO B -----\n";
cout<<"Cuantos datos ingresará?: ";
cin>>NB;
for(i=0;i<NB;i++)
{
cout<<"B["<<i<<"]: ";
cin>>B[i];
}
cout<<"\n----- CONJUNTO C -----\n";
cout<<"Cuantos datos ingresará?: ";
cin>>NC;
for(i=0;i<NC;i++)
{
cout<<"C["<<i<<"]: ";
cin>>C[i];
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO LOS CONJUNTOS\n";
cout<<"\n----- CONJUNTO A "<<NA<<"DATOS-----\n";
for(i=0;i<NA;i++)
cout<<"A["<<i<<"]: "<<A[i]<<endl;
k=0;
for (i=(NA+NB);i<NU;i++)
{
U[i]=C[k];
k++;
}
cout<<"\nMOSTRANDO LA UNION"<<endl;
for(i=0;i<NU;i++)
cout<<"U["<<i<<"]: "<<U[i]<<"\n";
break;
case 4:
break;
default: cout<<"...Error esa opcion no existe\n";
}
cout<<"...DESEA CONTINUAR S/N?: ";
cin>>opci;
}while(opci=='S' || opci=='s');
cout<<"Gracias...hasta pronto";
return 0;
}
VERSION 2
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int A[10],B[10],C[10],U[30],I[30],i,NA,NB,NC,NU,op,k,KD,contA=0,contB=0,contC=0;
char opci;
do{
system("cls");
cout<<"*** MENU DE OPCIONES ***\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar cada conjunto *\n";
cout<<"* 3) Union de conjuntos *\n";
cout<<"* 4) Interseccion *\n";
cout<<"* ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- CONJUNTO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
NB = contB+KD;
for(i=contB;i<NB;i++)
{
cout<<"B["<<i<<"]: ";
cin>>B[i];
contB++;
}
NC = contC+KD;
for(i=contC;i<NC;i++)
{
cout<<"C["<<i<<"]: ";
cin>>C[i];
contC++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO LOS CONJUNTOS\n";
cout<<"\n----- CONJUNTO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<"A["<<i<<"]: "<<A[i]<<endl;
return 0;
}
VERSION 3.
#include <iostream>
do{
system("cls");
cout<<"*** MENU DE OPCIONES ***\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar cada conjunto *\n";
cout<<"* 3) Union de conjuntos *\n";
cout<<"* 4) Interseccion *\n";
cout<<"* ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- CONJUNTO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
NB = contB+KD;
for(i=contB;i<NB;i++)
{
cout<<"B["<<i<<"]: ";
cin>>B[i];
contB++;
}
NC = contC+KD;
for(i=contC;i<NC;i++)
{
cout<<"C["<<i<<"]: ";
cin>>C[i];
contC++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO LOS CONJUNTOS\n";
cout<<"\n----- CONJUNTO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<"A["<<i<<"]: "<<A[i]<<endl;
return 0;
}
ARREGLOS BIDIMENSIONALES
Según (Yolanda M.C) Un arreglo bidimensional es uj vector de vectores que se denomina tabla
o matriz.
Los arreglos bidimensionales se referencian con dos subíndices.
El primero se refiere a la fila
El segundo se refiere a la columna. (2012.Pág.5)
EJERCICIOS EN CLASE
#include <iostream>
for(y=0;y<NF;y++)
for(x=0;x<NC;x++)
{
cout<<"M["<<y<<" "<<x<<"]: ";
cin>>M[y][x];
}
cout<<"Ingrese numero a multiplicar: ";
cin>>mult;
cout<<"\nMOSTRANDO LA MATRIZ:\n";
for(y=0;y<NF;y++)
{
cout<<endl;
for(x=0;x<NC;x++)
cout<<M[y][x]<<"\t";
}
/////////////////
for(y=0;y<NF;y++)
for(x=0;x<NC;x++)
M[y][x]=M[y][x]mult; //M[y][x]=mult;
////////////////
cout<<"\nMOSTRANDO LA NUEVA MATRIZ MULTIPLICADA POR :"<<mult<<endl;
for(y=0;y<NF;y++)
{
cout<<endl;
for(x=0;x<NC;x++)
cout<<M[y][x]<<"\t";
}
return 0;
}
#include <iostream>
using namespace std;
for(y=0;y<NF;y++)
for(x=0;x<NC;x++)
{
cout<<"M["<<y<<" "<<x<<"]: ";
cin>>M[y][x];
}
cout<<"Ingrese numero a multiplicar: ";
cin>>mult;
cout<<"\nMOSTRANDO LA MATRIZ:\n";
for(y=0;y<NF;y++)
{
cout<<endl;
for(x=0;x<NC;x++)
cout<<M[y][x]<<"\t";
}
/////////////////
for(y=0;y<NF;y++)
for(x=0;x<NC;x++)
M[y][x]=M[y][x]mult; //M[y][x]=mult;
////////////////
cout<<"\nMOSTRANDO LA NUEVA MATRIZ MULTIPLICADA POR :"<<mult<<endl;
for(y=0;y<NF;y++)
{
cout<<endl;
for(x=0;x<NC;x++)
cout<<M[y][x]<<"\t";
}
/////////////////////
cout<<"\nQue fila desea sumar...iniciar en cero?: \n";
cin>>Filsum;
suma=0;
for(y=0;y<NF;y++)
for(x=0;x<NC;x++)
if(y==Filsum)
{
cout<<M[y][x]<<"\t";
suma=suma+M[y][x];
}
return 0;
}
#include <iostream>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
do{
system("cls");
cout<<"* MENÚ DE OPCIONES *\n";
cout<<"1) INGRESO DE DATOS A LA MATRIZ...\n";
cout<<"2) MOSTRAR LA MATRIZ ACTUAL.......\n";
cout<<"3) MULTIPLICACIÓN POR UN ESCALAR..\n";
cout<<"4) SUMAR UNA FILA.................\n";
cout<<"5) SUMAR UNA COLUMNA..............\n";
cout<<"6) TRAZA DE LA MATRIZ.............\n";
cout<<"7) TRANSPUESTA DE LA MATRIZ.......\n";
cout<<"8) SUMA TRIANGULAR SUPERIOR.......\n";
cout<<"9) SUMA TRIANGULAR INFERIOR.......\n";
cout<<"\n....POR FAVOR ELIJA UNA OPCION: ";
cin>>op;
switch(op)
{
case 1:
cout<<"INGRESO DE DATOS A LA MATRIZ\n";
cout<<"Cuantas filas?: ";
cin>>NF;
cout<<"Cuantas columnas?: ";
cin>>NC;
srand(time(NULL));
for(f=0;f<NF;f++)
for(c=0;c<NC;c++)
{
//cout<<"M["<<f<<" "<<c<<"]: ";
//cin>>M[f][c];
dato = 1 + rand() % 100; // aleatorios (1-100)
M[f][c]=dato;
}
break;
case 2:
cout<<"\nMOSTRANDO LA NUEVA MATRIZ :"<<endl;
for(f=0;f<NF;f++)
{
cout<<endl;
for(c=0;c<NC;c++)
cout<<M[f][c]<<"\t";
}
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
default: cout<<"\nERROR ESA OPCION NOP EXISTE...\n";
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int numeros[100][100], dato, nfilas, ncol;
srand(time(NULL));
METODOS DE ORDENAMIENTO
1. ORDENANDO ARREGLOS
#include <iostream>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Arreglo *\n";
cout<<"* 3) Ordenar Arreglo *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<"A["<<i<<"]: "<<A[i]<<endl;
break;
case 3:
system("cls");
break;
return 0;
}
#include <iostream>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Arreglo *\n";
cout<<"* 3) Ordenar Arreglo *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<"A["<<i<<"]: "<<A[i]<<endl;
break;
case 3:
system("cls");
for(i=0;i<NA-1;i++)
for(j=i+1;j<NA;j++)
if(A[i]>A[j])
{
Aux=A[i];
A[i]=A[j];
A[j]=Aux;
}
break;
return 0;
}
METODO BURBUJITA
Este método es uno de los más usados por la mayoría de los estudiantes, ya que nos facilita un
mejor comprendimiento, suele ser menos eficiente ya que no suele utilizarse pero si aprender
de ello (Luis Hernandez.G.2010.Pág.655)
(Montserrat.S) Se basa en recorrer el array ("realizar una pasada") un cierto número de veces,
comparando pares de valores que ocupan posiciones adyacentes (0-1,1-2,...). Si ambos datos
no están ordenados, se intercambian. Esta operación se repite n-1 veces, siendo n el tamaño
del conjunto de datos de entrada.(2009.Pág.34).
BUSQUEDA VERSION 1
#include <iostream>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Arreglo *\n";
cout<<"* 3) Buscar dato secuencial *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>20);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<A[i]<<" ";
break;
case 3:
system("cls");
cout<<"BUSQUEDA SECUENCIAL O LINEAL\n";
cout<<"\nDigite el dato a buscar: ";
cin>>dato;
for(i=0;i<NA;i++)
if(A[i]==dato)
{
band=1;
posicion=i;
}
if(band==1)
cout<<"dato hallado en la posicion: "<<posicion;
else
cout<<"El dato no se encuentra en el arreglo";
break;
return 0;
}
METODO POR SELECCIÓN
Este método tiene una similitud al método burbuja, lo que le diferencia es que el ordenamiento
por selección ordena los datos a la matriz repetidamente haciendo que el número final o
también llamado menor se pase al principio.
(Jair Vasquez.P) El método por inserción binaria es una mejora del método de inserción directa.
La mejora consiste en realizar una búsqueda binaria en lugar de una búsqueda secuencial,
para insertar un elemento en la parte izquierda del arreglo, que ya se encuentra ordenado
(2009.Pág.21).
#include <iostream>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Arreglo *\n";
cout<<"* 3) Ordenar Arreglo *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<"A["<<i<<"]: "<<A[i]<<endl;
break;
case 3:
system("cls");
for(i=0;i<KD-1;i++)
for(j=i+1;j<KD;j++)
break;
return 0;
}
BUSQUEDA BINARIA
Es un algoritmo de un elemento de una lista ordenada de manera eficiente, reduce todas las
ubicaciones a una sola de manera introductiva, se usan más para encontrar elementos en un
arreglo (Jair Vasquez.P.2013.Pág.25).
(José Álvarez.B) El hecho de que el vector este ordenado se puede, también, aprovechar para
conseguir una mayor eficiencia planteando el siguiente algoritmo (2011.Pág.9).
#include <iostream>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Arreglo *\n";
cout<<"* 3) Buscar dato secuencial *\n";
cout<<"* 4) Busqueda binaria *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>20);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
cout<<A[i]<<" ";
break;
case 3:
system("cls");
cout<<"BUSQUEDA SECUENCIAL O LINEAL\n";
cout<<"\nDigite el dato a buscar: ";
cin>>dato;
band=0;
for(i=0;i<NA;i++)
if(A[i]==dato)
{
band=1;
posicion=i;
break;
}
if(band==1)
cout<<"dato hallado en la posicion: "<<posicion;
else
cout<<"El dato no se encuentra en el arreglo";
break;
case 4:
system("cls");
cout<<"BUSQUEDA BINARIA\n";
cout<<"\nDigite el dato a buscar: ";
cin>>dato;
//////ORDENANDO CON BURBUJITA//////
for(i=0;i<NA-1;i++)
for(j=i+1;j<NA;j++)
if(A[i]>A[j])
{
Aux=A[i];
A[i]=A[j];
A[j]=Aux;
}
///////////
//Algoritmo de la Busqueda Binaria
inf=0;
sup=NA-1;
i=0;
while((inf<=sup)&&(i<NA))
{
mitad = (inf+sup)/2;
cout<<"\nmitad: "<<mitad<<endl;
if(A[mitad] == dato)
{
band=1;
break;
}
if(A[mitad]>dato)
sup = mitad;
if(A[mitad]<dato)
inf = mitad;
i++;
}
if(band == 1)
cout<<"El numero SI se encontro en la pos: "<<mitad<<endl;
else
cout<<"El numero NO se encontro";
break;
default: cout<<"...Error esa opcion no existe\n";
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
cout << "Ingrese el tamaño del arreglo: ";
int n;
cin >> n;
int arreglo[n];
for (int i = 0; i < n; i++)
{
cout << "Ingrese el valor de A[" << i <<"]: ";
cin >> arreglo[i];
}
// ordenar el arreglo
for (int i = 0; i < n; i++)
{
sort(arreglo, arreglo + n);
}
// mostrar el arreglo ordenado
cout << "\nEl arreglo ordenado es: \n";
for (int i = 0; i < n; i++)
{
cout << arreglo[i] << " ";
}
// busqueda binaria
int busqueda;
cout << "\n\nIngrese el valor a buscar: ";
cin >> busqueda;
int inicio = 0;
int fin = n - 1;
int medio;
bool encontrado = false;
while (inicio <= fin && !encontrado)
{
medio = (inicio + fin) / 2;
if (arreglo[medio] == busqueda)
{
encontrado = true;
}
else if (arreglo[medio] > busqueda)
{
fin = medio - 1;
}
else
{
inicio = medio + 1;
}
}
if (encontrado)
{
cout << "El valor " << busqueda << " se encuentra en la posicion " << medio << endl;
}
else
{
cout << "El valor " << busqueda << " no se encuentra en el arreglo" << endl;
}
return 0;
}
ELIMINANDO UN ELEMENTO
#include <iostream>
#include <conio.h>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Listar Arreglo *\n";
cout<<"* 3) Eliminar un elemento *\n";
cout<<"* 4) ---------------------- *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>20);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"A["<<i<<"]: ";
cin>>A[i];
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n";
for(i=0;i<NA;i++)
{
cout<<A[i]<<" ";
getch();
}
break;
case 3:
system("cls");
cout<<"\nELIMINAR UN DATO DE LA LISTA\n";
cout<<"Ingrese dato a eliminar: ";
cin>>dato;
//////buscando dato a eliminar///////////
band=0;
for(i=0;i<NA;i++)
if(dato==A[i])
{
posicion=i;
band=1;
break;
}
if(band==1)
{
/////eliminando dato hallado////////////
if(posicion==(NA-1))
{
NA=NA-1;
contA=NA;
}
else
{
for(i=posicion;i<NA-1;i++)
A[i]=A[i+1];
NA=NA-1;
contA=NA;
}
}
else
cout<<"Dato no hallado...";
break;
case 4:
system("cls");
break;
return 0;
}
*****************************************************
CASE 2:
system("cls"); cout<<"\nMOSTRANDO EL ARREGLO: \n"; cout<<"\n----- ARREGLO A
"<<NA<<" DATOS-----\n"; i=0; do{ cout<<A[i]<<" "; tecla=getch(); if(tecla=='A') i++; if(i==NA) i=0;
}while(tecla=='A'); break;
CASE 2:
system("cls"); cout<<"\nMOSTRANDO EL ARREGLO: \n"; cout<<"\n----- ARREGLO A
"<<NA<<" DATOS-----\n"; i=0; do{ //cout<<"\n valor de i: "<<i<<" NA: "<<NA<<endl;
cout<<A[i]<<" "; tecla=getch(); if(i==(NA-1)) i=0; else if(tecla=='A'&& i<(NA-1)) i++;
//getch(); }while(tecla!='X'); break;
CASE 4
system("cls");
cout<<"\nLISTA CIRCULAR IZQUIERDA: \n";
i=NA-1;
do{
cout<<A[i]<<" ";
tecla=getch();
if(tecla=='R')
i--;
if(i==-1)
i=NA-1;
}
while(tecla=='R');
system("cls");
cout<<"\nLISTA DOBLEMENTE ENLAZADA: \n";
i=0;
do{
cout<<A[i]<<" ";
tecla=getch();
if(tecla=='A') i++;
if(i==NA)
i=0;
if(tecla=='R')
i--;
if(i==-1)
i=NA-1;
}
while(tecla=='R'|| tecla=='A');
break;
Es un conjunto de nudos alineados uno después del otro y unidos entre sí, a diferencia de un
arreglo el tamaño no es fijo ya que está determinado por una referencia.
La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este
enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si es el último
nodo (Eliomar.Nieves.2009.Pág.11).
LISTAS CIRCULARES
Una lista circular es una lista lineal en la que el último nodo apunta al
primero.
LISTAS DOBLEMENTE ENLAZADAS
Es una estructura de datos que está compuesta por nodos, cada nodo tiene dos punteros o un
dato, también podemos tener dos nodos centinelas, que van al principio y al final lo cual no
tienen ningún dato y que nos facilitara el recorrido de las listas en dos direcciones
(Raúl.H.Ruiz.G.2007.Pág.8).
(Raúl.H.Ruiz.G.) Las listas doblemente enlazadas no necesitan un nodo especial para acceder
a ellas, pueden recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a partir
de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta que se llega a
uno de los extremos (2007.Pág.9).
Una pila es un concepto de datos de entradas ordenadas tales que solo se pueden introducir y
eliminar por un extremo, llamado cima.
Las operaciones usuales en la pila son insertar (push) sirve para añadir un elemento en
la cima de la pila y quitar (pop) que sirve para sacar o eliminar un elemento.
CONCEPTO DE COLAS
Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la
que la operación de inserción se realiza por un extremo y la extracción por el otro.
Las operaciones usuales en las colas son insertar y quitar, lo cual insertar es para
añadir elemento al final de la cola, y quitar es para extraer in elemento por el extremo
opuesto.
CASO ( CEMENTERIO )
#include <iostream>
#include <conio.h>
struct T_cadaver {
char DNI[10];
char Nom[30];
char Pab[30];
//char Ubicacion
char Estado;
char Sexo;
int AnioF;
};
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Lista *\n";
cout<<"* 3) ............ *\n";
cout<<"* 4) ............ *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- ARREGLO A -----\n";
do{
cout<<"Cuantos datos ingresara?: ";
cin>>KD;
}while(KD<0 || KD>100);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"Persona["<<i<<"]: ";
cout<<"\nDNI: ";
cin>>Persona[i].DNI;
cout<<"\nApellidos y Nombres: ";
cin.getline(Persona[i].Nom,30,'\n');
fflush(stdin);
cout<<"\nPabellon: ";
cin.getline(Persona[i].Pab,30,'\n');
cout<<"\nPerpetuo o temporal: ";
cin>>Persona[i].Estado;
cout<<"\nSexo: ";
cin>>Persona[i].Sexo;
fflush(stdin);
cout<<"\nAnio de fallecimiento: ";
cin>>Persona[i].AnioF;
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO EL ARREGLO: \n";
cout<<"\n----- ARREGLO A "<<NA<<" DATOS-----\n\n";
for(i=0;i<NA;i++)
{
cout<<"Persona["<<i<<"]: ";
cout<<"\nDNI: "<<Persona[i].DNI;
cout<<"\nApellidos y Nombres: "<<Persona[i].Nom;
cout<<"\nPabellon: "<<Persona[i].Pab;
cout<<"\nPerpetuo o temporal: "<<Persona[i].Estado;
cout<<"\nSexo: "<<Persona[i].Sexo;
cout<<"\nAnio de fallecimiento: "<<Persona[i].AnioF;
getch();
}
break;
case 3:
system("cls");
break;
case 4:
system("cls");
break;
return 0;
}
CASO VETERINARIA
#include <iostream>
#include <conio.h>
#include <string.h>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Lista *\n";
cout<<"* 3) ............ *\n";
cout<<"* 4) ............ *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- BASE VETERINARIA -----\n";
do{
cout<<"Cuantos PACIENTES ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"\nPACIENTE["<<i<<"]: \n";
fflush(stdin);
cout<<"Codigo: ";
cin>>Paciente[i].Codigo;
fflush(stdin);
cout<<"Nombre de la mascota: ";
cin.getline(Paciente[i].Nom_masc,20,'\n');
cout<<"Especie: ";
cin>>Paciente[i].Especie;
cout<<"Sexo: ";
cin>>Paciente[i].Sexo;
fflush(stdin);
cout<<"Nombre del dueno: ";
cin.getline(Paciente[i].Nom_due,30,'\n');
fflush(stdin);
cout<<"DNI: ";
cin>>Paciente[i].DNI;
cout<<"Celular: ";
cin>>Paciente[i].Cel;
cout<<"Enfermedad de la mascota: ";
cin.getline(Paciente[i].Enferm,20,'\n');
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO DATOS DE PACIENTES: \n";
cout<<"\n----- EXISTEN "<<NA<<" PACIENTES-----\n\n";
for(i=0;i<NA;i++)
{
cout<<"\nPACIENTE["<<i<<"]: \n";
cout<<"Codigo: "<<Paciente[i].Codigo;
cout<<"\nNombre de la mascota:
"<<Paciente[i].Nom_masc;
cout<<"\nEspecie: "<<Paciente[i].Especie;
cout<<"\nSexo: "<<Paciente[i].Sexo;
cout<<"\nNombre del dueño:
"<<Paciente[i].Nom_due;
cout<<"\nDNI: "<<Paciente[i].DNI;
cout<<"\nCelular: "<<Paciente[i].Cel;
cout<<"\nEnfermedad de la mascota:
"<<Paciente[i].Enferm;
getch();
}
break;
case 3:
system("cls");
cout<<"\nBUSQUEDA POR DNI DEL DUENO: \n";
////indicar de DNI a buscar
cout<<"Ingrese DNI a buscar: ";
cin>>DNI_due;
///comparar cada casilla con el DNI ingresado
band=0;
for(i=0;i<NA;i++)
if(strcmp(DNI_due,Paciente[i].DNI)==0)
//DNI_due==Paciente[i].DNI
{
posi=i;
band=1;
break;
}
if(band==1)
{
cout<<"\nPACIENTE HALLADO, EN EL CASILLERO:
"<<posi<<endl;
cout<<"\nPACIENTE["<<posi<<"]: \n";
cout<<"Codigo: "<<Paciente[posi].Codigo;
cout<<"\nNombre de la mascota:
"<<Paciente[posi].Nom_masc;
cout<<"\nEspecie: "<<Paciente[posi].Especie;
cout<<"\nSexo: "<<Paciente[posi].Sexo;
cout<<"\nNombre del dueño:
"<<Paciente[posi].Nom_due;
cout<<"\nDNI: "<<Paciente[posi].DNI;
cout<<"\nCelular: "<<Paciente[posi].Cel;
cout<<"\nEnfermedad de la mascota:
"<<Paciente[posi].Enferm;
}
break;
case 4:
system("cls");
break;
return 0;
}
#include <iostream>
#include <conio.h>
#include <string.h>
do{
system("cls");
cout<<"* MENU DE OPCIONES *\n";
cout<<"* 1) Ingreso de datos *\n";
cout<<"* 2) Mostrar Lista *\n";
cout<<"* 3) Busqueda por DNI *\n";
cout<<"* 4) Buscar perros menores de 3 anios *\n";
cout<<"* 5) Ordenar por Ap_nom del dueño *\n";
cout<<"*\n ...ELIJA UNA OPCION....: ";
cin>>op;
switch(op)
{
case 1:
cout<<"\n----- BASE VETERINARIA -----\n";
do{
cout<<"Cuantos PACIENTES ingresara?: ";
cin>>KD;
}while(KD<0 || KD>10);
NA = contA+KD;
for(i=contA;i<NA;i++)
{
cout<<"\nPACIENTE["<<i<<"]: \n";
fflush(stdin);
cout<<"Codigo: ";
cin>>Paciente[i].Codigo;
fflush(stdin);
cout<<"Nombre de la mascota: ";
cin.getline(Paciente[i].Nom_masc,20,'\n');
cout<<"Especie: ";
cin>>Paciente[i].Especie;
cout<<"Sexo: ";
cin>>Paciente[i].Sexo;
fflush(stdin);
cout<<"Nombre del dueno: ";
cin.getline(Paciente[i].Nom_due,30,'\n');
fflush(stdin);
cout<<"DNI: ";
cin>>Paciente[i].DNI;
cout<<"Celular: ";
cin>>Paciente[i].Cel;
fflush(stdin);
cout<<"Enfermedad de la mascota: ";
cin.getline(Paciente[i].Enferm,20,'\n');
fflush(stdin);
cout<<"Edad de la mascota: ";
cin>>Paciente[i].Edad_masc;
contA++;
}
break;
case 2:
system("cls");
cout<<"\nMOSTRANDO DATOS DE PACIENTES: \n";
cout<<"\n----- EXISTEN "<<NA<<" PACIENTES-----\n\n";
for(i=0;i<NA;i++)
{
cout<<"\nPACIENTE["<<i<<"]: \n";
cout<<"Codigo: "<<Paciente[i].Codigo;
cout<<"\nNombre de la mascota:
"<<Paciente[i].Nom_masc;
cout<<"\nEspecie: "<<Paciente[i].Especie;
cout<<"\nSexo: "<<Paciente[i].Sexo;
cout<<"\nNombre del dueño:
"<<Paciente[i].Nom_due;
cout<<"\nDNI: "<<Paciente[i].DNI;
cout<<"\nCelular: "<<Paciente[i].Cel;
cout<<"\nEnfermedad de la mascota:
"<<Paciente[i].Enferm;
cout<<"\nEdad de la mascota:
"<<Paciente[i].Edad_masc;
getch();
}
break;
case 3:
system("cls");
cout<<"\nBUSQUEDA POR DNI DEL DUENO: \n";
////indicar de DNI a buscar
cout<<"Ingrese DNI a buscar: ";
cin>>DNI_due;
///comparar cada casilla con el DNI ingresado
band=0;
for(i=0;i<NA;i++)
if(strcmp(DNI_due,Paciente[i].DNI)==0)
//DNI_due==Paciente[i].DNI
{
posi=i;
band=1;
break;
}
if(band==1)
{
cout<<"\nPACIENTE HALLADO, EN EL CASILLERO:
"<<posi<<endl;
cout<<"\nPACIENTE["<<posi<<"]: \n";
cout<<"Codigo: "<<Paciente[posi].Codigo;
cout<<"\nNombre de la mascota:
"<<Paciente[posi].Nom_masc;
cout<<"\nEspecie: "<<Paciente[posi].Especie;
cout<<"\nSexo: "<<Paciente[posi].Sexo;
cout<<"\nNombre del dueño:
"<<Paciente[posi].Nom_due;
cout<<"\nDNI: "<<Paciente[posi].DNI;
cout<<"\nCelular: "<<Paciente[posi].Cel;
cout<<"\nEnfermedad de la mascota:
"<<Paciente[posi].Enferm;
cout<<"\nEdad de la mascota:
"<<Paciente[i].Edad_masc;
}
break;
case 4:
system("cls");
cout<<"\nBUSQUEDA DE PERROS MENORES DE 3
ANIOS: \n";
for(i=0;i<NA;i++)
if(strcmp(Paciente[i].Especie,"perro")==0 &&
Paciente[i].Edad_masc<3)
{
cout<<"\nPACIENTE["<<i<<"]: \n";
cout<<"Codigo: "<<Paciente[i].Codigo;
cout<<"\nNombre de la mascota:
"<<Paciente[i].Nom_masc;
cout<<"\nEspecie: "<<Paciente[i].Especie;
cout<<"\nSexo: "<<Paciente[i].Sexo;
cout<<"\nNombre del dueño:
"<<Paciente[i].Nom_due;
cout<<"\nDNI: "<<Paciente[i].DNI;
cout<<"\nCelular: "<<Paciente[i].Cel;
cout<<"\nEnfermedad de la mascota:
"<<Paciente[i].Enferm;
cout<<"\nEdad de la mascota:
"<<Paciente[i].Edad_masc;
}
break;
BIBLIOGRAFIAS.
https://upload.wikimedia.org/wikipedia/commons/1/17/Programacion.pdf (pág. 1)
http://robotica.uv.es/pub/Libro/PDFs/CAPI5.pdf
https://es.wikipedia.org/wiki/Estructura_de_datos
•$childt Herbert,#$$ %ara programadores.Mc\raJMHill. &KK0.
•httpA''es.Ji]ipedia.org'Ji]i'Matriz"_(matem^C/^*&tica)
https://www.mheducation.es/bcv/guide/capitulo/8448198441.pdf (Pág. 3)
https://es.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-
search
https://www.cs.buap.mx/~ymoyao/admin/archivos/arreglos_bidi4_3.pdf
https://kesquivel.files.wordpress.com/2010/08/listas-circularesv2010.pdf