Listas Encadenadas
Quisiera que me ayudaran con un programa que tengo que hacer, si no lo hago me reprueban, espero puedan ayudarme el planteamiento del problema es el siguiente:
Realiza un programa en C++ que implemente una pila como lista encadenada. Toma como base el programa que viste como ejemplo la clase anterior ListaEnc1.cpp.
Recuerda que una pila es una estructura de datos en la que sus elementos entran y salen siempre por el mismo extremo.
Implementa las funciones típicas de una pila:
a.Pus (insertar un elemento)
b.Pop (sacar un elemento)
c.Vacía, función que regresa true si la pila está vacía y false en caso contrario.
d.Mostrar, función que muestre todo el contenido de la pila.
Realiza una función main que permita al usuario probar todas las funciones de la pila.
El programa ListaEnc1.cpp es el siguiente:
#include <iostream>
using namespace std;
//estructura del Nodo
struct Nodo
{
int numero;
Nodo *siguiente;
};
// La clase Lista se usa para manejar una lista encadenada de nodos
class Lista
{
public:
Lista();
~Lista();
void Agregar(int num);// metodo que agrega a la lista en orden ascendente
void Mostrar();// muestra todos los elementos de la lista
void Borrar(int num);// elimina de la lista el nodo que contiene el valor num
private:
Nodo *inicio; // apuntador al inicio de la lista
};
// Constructor para la lista, inicializa el inicio con NULL porque la lista esta vacia
Lista::Lista()
{
inicio = NULL;
}
// Destructor de la lista, libera la memoria utilizada por la lista
Lista::~Lista()
{
Nodo *temp, *anterior;
temp = inicio;
while (temp != NULL)
{ anterior = temp;
temp = temp->siguiente;
delete anterior;
}
}
// Agregar Nodos en orden ascendente
void Lista::Agregar(int num)
{
Nodo *temp, *nuevo, *anterior;
nuevo = new Nodo;
nuevo->numero = num;
nuevo->siguiente = NULL;
temp = inicio;
anterior = NULL;// como no hay nodo anterior a inicio se pone NULL
if (inicio == NULL) // Si es el primer elemento de la lista
inicio = nuevo;
else
{
//busca la posicion para insertar en orden
while ((temp != NULL) && (temp->numero < num))
{
anterior = temp;
temp = temp->siguiente;
}
nuevo->siguiente = temp;
if (anterior == NULL) // si anterior es nulo significa que estoy en
// el primer elemento de la lista
inicio = nuevo;
else
anterior->siguiente = nuevo;
}
}
// Mostrar la lista de numeros
void Lista::Mostrar()
{
Nodo *n;
cout<<"\n Lista de Numeros \n";
n = inicio;
while (n != NULL)
{ cout<<n->numero<<endl;
n = n->siguiente;
}
}
// Elimina nodos
void Lista::Borrar(int num)
{ Nodo *nodo, *anterior;
nodo = inicio;
anterior = NULL;
while ((nodo != NULL) && (nodo->numero != num))
{ anterior = nodo;
nodo = nodo->siguiente;
}
if(nodo == NULL)
cout<<"No se encuentra ese numero"<<endl;
else
{
if(nodo == inicio)// se va a borrar el primer nodo
inicio = inicio->siguiente;
else // se va a borrar entre dos nodos
anterior->siguiente = nodo->siguiente;
delete nodo;
}
}
// funcion principal
int main( )
{
// Variables locales al main
int num;
int opc;
Lista ListaNum;
do
{
cout<< "Lista de numeros"<<endl;
cout<< "1. Agregar"<<endl;
cout<< "2. Mostrar Lista"<<endl;
cout<< "3. Eliminar"<<endl;
cout<< "4. Terminar"<<endl;
cout<< "Opcion ";
cin>>opc;
switch (opc)
{ case 1:
// Se leen los datos por pantalla
cout<<"Numero ? \n";
cin>>num;
ListaNum.Agregar(num);
break;
case 2:
// Muestra todos los numeros de la lista
ListaNum.Mostrar();
break;
case 3:
// Elimina un nodo
cout<<"Numero del producto\n";
cin>>num;
ListaNum.Borrar(num);
break;
}
} while (opc != 4);
return 0;
}
// Termina el programa ListaNum.cpp
Realiza un programa en C++ que implemente una pila como lista encadenada. Toma como base el programa que viste como ejemplo la clase anterior ListaEnc1.cpp.
Recuerda que una pila es una estructura de datos en la que sus elementos entran y salen siempre por el mismo extremo.
Implementa las funciones típicas de una pila:
a.Pus (insertar un elemento)
b.Pop (sacar un elemento)
c.Vacía, función que regresa true si la pila está vacía y false en caso contrario.
d.Mostrar, función que muestre todo el contenido de la pila.
Realiza una función main que permita al usuario probar todas las funciones de la pila.
El programa ListaEnc1.cpp es el siguiente:
#include <iostream>
using namespace std;
//estructura del Nodo
struct Nodo
{
int numero;
Nodo *siguiente;
};
// La clase Lista se usa para manejar una lista encadenada de nodos
class Lista
{
public:
Lista();
~Lista();
void Agregar(int num);// metodo que agrega a la lista en orden ascendente
void Mostrar();// muestra todos los elementos de la lista
void Borrar(int num);// elimina de la lista el nodo que contiene el valor num
private:
Nodo *inicio; // apuntador al inicio de la lista
};
// Constructor para la lista, inicializa el inicio con NULL porque la lista esta vacia
Lista::Lista()
{
inicio = NULL;
}
// Destructor de la lista, libera la memoria utilizada por la lista
Lista::~Lista()
{
Nodo *temp, *anterior;
temp = inicio;
while (temp != NULL)
{ anterior = temp;
temp = temp->siguiente;
delete anterior;
}
}
// Agregar Nodos en orden ascendente
void Lista::Agregar(int num)
{
Nodo *temp, *nuevo, *anterior;
nuevo = new Nodo;
nuevo->numero = num;
nuevo->siguiente = NULL;
temp = inicio;
anterior = NULL;// como no hay nodo anterior a inicio se pone NULL
if (inicio == NULL) // Si es el primer elemento de la lista
inicio = nuevo;
else
{
//busca la posicion para insertar en orden
while ((temp != NULL) && (temp->numero < num))
{
anterior = temp;
temp = temp->siguiente;
}
nuevo->siguiente = temp;
if (anterior == NULL) // si anterior es nulo significa que estoy en
// el primer elemento de la lista
inicio = nuevo;
else
anterior->siguiente = nuevo;
}
}
// Mostrar la lista de numeros
void Lista::Mostrar()
{
Nodo *n;
cout<<"\n Lista de Numeros \n";
n = inicio;
while (n != NULL)
{ cout<<n->numero<<endl;
n = n->siguiente;
}
}
// Elimina nodos
void Lista::Borrar(int num)
{ Nodo *nodo, *anterior;
nodo = inicio;
anterior = NULL;
while ((nodo != NULL) && (nodo->numero != num))
{ anterior = nodo;
nodo = nodo->siguiente;
}
if(nodo == NULL)
cout<<"No se encuentra ese numero"<<endl;
else
{
if(nodo == inicio)// se va a borrar el primer nodo
inicio = inicio->siguiente;
else // se va a borrar entre dos nodos
anterior->siguiente = nodo->siguiente;
delete nodo;
}
}
// funcion principal
int main( )
{
// Variables locales al main
int num;
int opc;
Lista ListaNum;
do
{
cout<< "Lista de numeros"<<endl;
cout<< "1. Agregar"<<endl;
cout<< "2. Mostrar Lista"<<endl;
cout<< "3. Eliminar"<<endl;
cout<< "4. Terminar"<<endl;
cout<< "Opcion ";
cin>>opc;
switch (opc)
{ case 1:
// Se leen los datos por pantalla
cout<<"Numero ? \n";
cin>>num;
ListaNum.Agregar(num);
break;
case 2:
// Muestra todos los numeros de la lista
ListaNum.Mostrar();
break;
case 3:
// Elimina un nodo
cout<<"Numero del producto\n";
cin>>num;
ListaNum.Borrar(num);
break;
}
} while (opc != 4);
return 0;
}
// Termina el programa ListaNum.cpp
2 respuestas
Respuesta de lordford
1
Respuesta de riquezada
1