0% encontró este documento útil (0 votos)
738 vistas10 páginas

Métodos de Búsqueda en C++ y Estructuras de Datos

Este documento presenta un cuestionario sobre estructuras de datos. En la primera sección, se pide completar un cuadro sinóptico sobre métodos de búsqueda como la búsqueda secuencial y binaria, incluyendo ejemplos de código en C++. En la segunda sección, se pide incluir un ejemplo de código que use pilas, el cual presenta una clase Pila con funciones como entrarDato y sacarDato.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
738 vistas10 páginas

Métodos de Búsqueda en C++ y Estructuras de Datos

Este documento presenta un cuestionario sobre estructuras de datos. En la primera sección, se pide completar un cuadro sinóptico sobre métodos de búsqueda como la búsqueda secuencial y binaria, incluyendo ejemplos de código en C++. En la segunda sección, se pide incluir un ejemplo de código que use pilas, el cual presenta una clase Pila con funciones como entrarDato y sacarDato.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1

NOMBRE DEL ALUMNO: FRANCISCO DUEÑAS MONSIVAIS

NUMERO DE CUENTA: 10199034

MATERIA: ESTRUCTURA DE DATOS

PROFESOR: DULCE ANGELICA SALAS SALINAS

FECHA DE LA ACTIVIDAD: 02/12/18

TITULO DE LA ACTIVIDAD: ENTREGABLE 2

Cuestionario 2 Estructuras de datos


2

CUESTIONARIO 2
A. Complete los espacios en azul del siguiente cuadro sinóptico relacionado con
los métodos(o algoritmos) de búsqueda más comunes:

Método de búsqueda Describa en qué consiste Ejemplo de código en C++


donde se utilice el método
de búsqueda

Búsqueda secuencial Nos permitirá recorrer una //Librerias #include


lista o un arreglo desde el "stdafx.h" #include using
inicio hasta el fin y para namespace std; int main() {
hasta que se pueda //Declarando variables. int
encontrar el elemento clave,encontrado, n, i, j;
buscado o que se arribe el //Pedir tamaño del arreglo.
final de la estructura, lo cual cout << "Ingrese dimensión
indicará que no se ha del arreglo: "; cin >> n;
encontrado nada Cout<< n;i++) { cout <<
"Ingrese dato [" << i << "]: ";
cin >> arreglo[i]; } //Pedir
dato o clave a buscar. cout
<< "Ingrese dato que desea
buscar: " << endl; cin >>
clave; //Declarar variable de
éxito de búsqueda.
encontrado = 0; //Buscar
clave o dato en el arreglo.
for (j = 0;j < n;j++) { //Si el
elemento de la posición
actual del arreglo es similar
a la clave de búsqueda,
despliega mensaje de
encontrado. if (arreglo[j] ==
clave) { 6 cout << "Se
encontro el " << clave << "
en la posicion [" << j << "]"
<< endl; encontrado = 1; } }
//Libera arreglo dinámico en
memoria. delete[] arreglo;
//Si no se encontró la clave
despliega el mensaje de no

Cuestionario 2 Estructuras de datos


3

encontrado. if (encontrado
!= 1) cout << "No se
encontro el dato" << endl;
system("pause"); return 0; }

Búsqueda Binaria Consiste en realizar una //Librerias #include


búsqueda de un arreglo "stdafx.h" #include using
mas eficiente de números el namespace std; int main() {
cual sin embargo debe //Declarando variables. int
estar ordenado de manera clave,encontrado, n, i, j;
ascendente para que //Pedir tamaño del arreglo.
funcione cout << "Ingrese dimensión
del arreglo: "; cin >> n;
Cout<< n;i++) { cout <<
"Ingrese dato [" << i << "]: ";
cin >> arreglo[i]; } //Pedir
dato o clave a buscar. cout
<< "Ingrese dato que desea
buscar: " << endl; cin >>
clave; //Declarar variable de
éxito de búsqueda.
encontrado = 0; //Buscar
clave o dato en el arreglo.
for (j = 0;j < n;j++) { //Si el
elemento de la posición
actual del arreglo es similar
a la clave de búsqueda,
despliega mensaje de
encontrado. if (arreglo[j] ==
clave) { 6 cout << "Se
encontro el " << clave << "
en la posicion [" << j << "]"
<< endl; encontrado = 1; } }
//Libera arreglo dinámico en
memoria. delete[] arreglo;
//Si no se encontró la clave
despliega el mensaje de no
encontrado. if (encontrado
!= 1) cout << "No se
encontro el dato" << endl;
system("pause"); return 0; }

Cuestionario 2 Estructuras de datos


4

B. Investigue un ejemplo de código en C++ que haga uso de PILAS e inclúyalo


a continuación (diferente al ejemplo mostrado en el Programa14_Pilas):

#include "iostream.h"

// Pila hecha con un vector fijo de 50 posiciones


class Pila {
int vector[50];
// indicePila: -1 -> pila vacia 0 -> posicion del dato
int indicePila;
public:
Pila() { indicePila = -1; }; // constructor
// funciones analizadoras
void mostrarDatos();
int cuantosDatos();
// funciones modificadoras
void entrarDato(int dato);
int sacarDato();
};

// Esta función sale del cuerpo de la clase porque usa un ciclo.


void Pila::mostrarDatos() {
cout << endl << "DATOS EN LA PILA" << endl;
for (int i=0; i<=indicePila; i++)
cout << "Dato No. " << i << " : " << vector[i] << endl;
cout << endl;
}

int Pila::cuantosDatos() {
return indicePila + 1;
}

void Pila::entrarDato(int dato) {


if (indicePila < 49) {
indicePila ++;
vector[indicePila] = dato;
} else
cout << "Pila desbordada: no se añadio valor" << endl;
}

int Pila::sacarDato() {
if (indicePila > -1) {

Cuestionario 2 Estructuras de datos


5

indicePila --;
return vector[indicePila + 1];
}
return -1;
}

Hay que notar que todas las funciones con excepción del constructor se sacaron del
cuerpo de la clase y su nombre se resolvió usando los dos pares de dos puntos::. Esto
permite implementar una función miembro por fuera del cuerpo de la clase.

De esta forma por ejemplo, la función que dentro del cuerpo de la clase se llama:

void entrarDato(int dato);

Afuera del cuerpo de la clase se llama

void Pila::entrarDato(int dato) {

Esa es la misma función solo que el primero es el prototipo que se le pasa a la clase para
que sepa que hay una función con ese nombre que será implementada más adelante.

Ahora hace falta un cuerpo del programa o main que sepa como manejar esta estructura.
Para eso implementaremos una función menú que se encargará de pedir al usuario que
indique cual función desea ejecutar, usando una estructura while.

Se ha creado una función adicional que maneja el menú:

int menu() {
cout << endl << endl;
cout << "Bienvenido al programa manejador de Pila de enteros" << endl;
cout << "Escoja una opción" << endl;
cout << "**************************************" << endl;
cout << "0. Salir del Programa" << endl;
cout << "1. Adicionar entero" << endl;
cout << "2. Sacar entero" << endl;
cout << "3. Ver cuantos datos tiene la pila" << endl;
cout << "4. Mostrar datos en la pila" << endl;
cout << "**************************************" << endl;
int opcion;
cin >> opcion;
return opcion;
}

main () {
Pila pila1;

Cuestionario 2 Estructuras de datos


6

int respuesta,opcion;
opcion = -1;
while (opcion != 0) {
opcion = menu();
switch (opcion) {
case 0:
cout << "Gracias por usar nuestro software" << endl;
break;
case 1:
cout << "indique valor a entrar:";
cin >> respuesta;
pila1.entrarDato(respuesta);
break;
case 2:
cout << "Dato obtenido:" << pila1.sacarDato() << endl;
break;
case 3:
cout << "Hay " << pila1.cuantosDatos() << " en la pila" << endl;
break;
case 4:
pila1.mostrarDatos();
}
}
return 0;
}

El programa completo será obviamente la parte que define e implementa la clase con la
segunda que usa la función menú y el main.

El switch es usado para atender cada una de las opciones que son ofrecidas al usuario en
el menú

Explique para qué sirve y cómo funciona el código del inciso B. Si hay comandos
nuevos investíguelos e incluya una descripción de su funcionamiento:

Cuestionario 2 Estructuras de datos


7

Vamos a crear una clase llamada Pila que manejará una estructura de este tipo a través
de una clase. La definición inicial será así:

#include "iostream.h"

class Pila {
int vector[50];
public:
Pila() { }
}

Pero en este caso al crear este objeto no hace nada porque el constructor está vacío y no
hay forma de llegar a su vector interno.

Las estructuras tienen funciones que se agrupan funcionalmente de la siguiente forma.

 Constructores
 Destructores
 Funciones analizadoras: que permiten observar los datos
 Funciones modificadoras: que modifican la estructura

Para una pila entonces deberemos tener un constructor, funciones de análisis


(mostrarDatos,verPrimerValor), y modificadoras (entrarDato,sacarDato). Como no
usaremos apuntadores la función destructora no será necesaria.

Es necesario recordar que en la pila el dato que sale fue el último que se metio en la
estructura.

Para la pila se usará un vector estático de 50 posiciones y un índice que se encargará de


indicar donde está la cabeza de la pila. Cuando indicePila sea -1, la pila estará vacía.
Cuando sea 0, indicará que en la pila hay un dato en la posición 0, y así sucesivamente.

C. Investigue un ejemplo de código en C++ que haga uso de COLAS e


inclúyalo a continuación(diferente al ejemplo mostrado en el
Programa15_Colas):
#include<stdio.h>
#include<stdlib.h>
Typedef int tipodato;
Struct nodo
{
Tipodato el;
Struct nodo* sig;
};
Typedef struct

Cuestionario 2 Estructuras de datos


8

}
Nodo* frente;
Nodo * final;
}cola;
Void vaciaC(cola* C);
Void añadeC(cola* C. tipodato el);
Void eliminarC(cola*C);
Void borrarC(cola* C);
Tipodato primeroC (cola C);
Int esvaciaC(cola C);
Nodo* crearnodo(tipodato el);
Void vaciarC(cola* C)
{
C->frente = null;
C->final = null;
}
Nodo*crearnodo(tipodato el)
{
Nodo* nn;
Nn = (nodo*) malloc(sizeof(nodo));
nn->el = el;
nn->sig = null;
return nn;}
int esvaciaC(Cola C)
return (C.frente == null);
}
Voyd añadeC(cola* C,tipodato el)
{
Nodo* a;
A = crearnodo(el);
If (esvaciaC(*C))
C->frente = a;
Else
C->final->sig = a;
C->final = a;
}
Void borrarC(cola*C)
{
Nodo *a;
If (esvaciaC(*C))
{
A = C->frente;

Cuestionario 2 Estructuras de datos


9

C->frente = C->frente->sig;
If(C->frente == null)
C->final ==null;
Free(a);
}
Else
{
Puts(“error eliminacion de una cola vacia”);
Exit(-1);
}
}
Topodato primeroC(cola C)
{
If (esvaciaC(C))
{
Puts(“error: cola vacia”);
Exit(-1);
}
Return (C.frente->el);
}
Void eliminaC(Cola* C)
{
For (;C->frente;)
{
Nodo* n;
N =C->frente;
C->frente = C->frente->sig;
Free(n);
}
}

D. Explique para qué sirve y cómo funciona el código del inciso D. Si hay
comandos nuevos investíguelos e incluya también su descripción.
Se declaran en primer lugar todos los tipos de datos necesarios para una lista enlazada.
Una cola será una estructura con dos punteros a la lista frente que apuntara al primer
elemento de la cola y final que apuntara al último elemento.
• VaciarC. Crea una cola vacia, para lo cual basta con poner en frente y el final a null.
• EsvaciaC. Decide si la cola esta vacía. Es decir si frente y final valen null
• EstallenaC. Esta función no es ahora necesaria ya que teóricamente no hay límite.
• PrimeroC. Extrae el primer elemento de la cola que se encuentra en el nodo frente.

Cuestionario 2 Estructuras de datos


10

Previamente a esta operación ha de comprobarse que la cola no este vacia.


• AñadeC. Añade un elemento a la cola.este elemento se añade en un nuevo nodo que
será el siguiente de final en el caso de que la cola no este vacia. Si la cola esta vacia el
frente debe apuntar a este nuevo nodo. En todo caso el final siempre debe moverse al
nuevo nodo.
• BorrarC. Elimina el primer elemento de la cola. Para hacer esta operación la cola no debe
estar vacia. El borrado se realiza avanzando frente al nodo siguiente y liberando la
memoria correspondiente .
• EliminarC. Esta primitiva libera toda la memoria que tenga una cola ya creada. Se realiza
mediante un bucle controlado por el final de la lista. Liberando la memoria ocupada por
cada nodo en cada una de las interacciones del bucle

Bibliografía

https://www.programacion.com.py/escritorio/c/colas-en-c

fuente consultada el 02 de diciembre de 2018.

http://arbolescolaspilas.blogspot.com/2012/07/programacion-pilas.html

fuente consultada el 02 de diciembre de 2018.

https://www.programacion.com.py/escritorio/c/pilas-en-c

fuente consultada el 02 de diciembre de 2018.

Cuestionario 2 Estructuras de datos

También podría gustarte