Listas - Estructura de datos
-
Upload
santiago-lovon -
Category
Documents
-
view
6 -
download
0
description
Transcript of Listas - Estructura de datos
Estructura de Datos y Algoritmos: Tarea #1Lunes, Agosto 24, 2015
Santiago Lovon
1
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1
Lista enlazada simple
Listing 1: Main.cpp
/*
* Main.cpp
*
* Created on: 21 de ago. de 2015
5 * Author: santiago
*/
#include "Lista.h"
10
int main(){
Lista Lista1;//Crea la lista vacia
Lista1.AddLast(5);//Agrega un nodo con valor 5 al final de la lista
Lista1.Print();//imprime
15 Lista1.AddFront(3);//Agrega un nodo con valor 3 al inicio de la lista
Lista1.Print();//imprime
Lista1.AddLast(9);//Agrega un nodo con valor 9 al final de la lista
Lista1.Print();//imprime
Lista1.RemoveFront();//Elimina el primer nodo
20 Lista1.Print();//imprime
Lista1.AddLast(1);//Agrega un nodo con valor 1 al final de la lista
Lista1.Print();//imprime
Lista1.RemoveLast();//Elimina el ultimo nodo
Lista1.Print();//imprime
25 return 0;
}//end main
Listing 2: Nodo.h
/*
* Nodo.h
*
* Created on: 21 de ago. de 2015
5 * Author: santiago
*/
#ifndef NODO_H_
#define NODO_H_
10
class Nodo {
int m_dato;
Nodo * m_psig;
public:
15 Nodo();//Constructor por defecto
Nodo(int dato);//Contructor con parametro dato
Nodo(Nodo & nodo);//Constuctor copia
˜Nodo();//Destructor
int getDato() const;//Obtener dato
20 void setDato(int dato);//Asignar dato
Nodo* getPsig() const;//Obtener puntero a siguiente nodo
Lista enlazada simple Continua en la siguiente pagina. . . Pagina 2 de 7
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1Lista enlazada simple (continued)
void setPsig( Nodo* psig);//Asignar puntero a siguiente nodo
};
25 #endif /* NODO_H_ */
Listing 3: Nodo.cpp
/*
* Nodo.cpp
*
* Created on: 21 de ago. de 2015
5 * Author: santiago
*/
#include "Nodo.h"
10 Nodo::Nodo() { // Constructor por defecto
m_dato = 0;// Asignar nulo a m_dato
m_psig = 0;// Asignar nulo a m_psig
}
15 int Nodo::getDato() const {
return m_dato;//retornar m_dato
}
void Nodo::setDato(int dato) {
20 m_dato = dato;//asignar m_dato
}
Nodo* Nodo::getPsig() const {
return m_psig;//retornar m_psig
25 }
Nodo::Nodo(int dato) {
m_dato = dato;//Asignar dato a m_dato
m_psig = 0;// Asignar nulo a m_psig
30 }
Nodo::Nodo(Nodo& nodo) {
m_dato = nodo.m_dato;//Asignar m_dato de nodo a m_dato local
m_psig = nodo.m_psig;//Asignar m_psig de nodo a m_psig local
35 }
void Nodo::setPsig( Nodo* psig) {
m_psig = psig;//Asignar psig a m_psig
}
40
Nodo::˜Nodo() {
// TODO Auto-generated destructor stub
}
Listing 4: Lista.h
Lista enlazada simple Continua en la siguiente pagina. . . Pagina 3 de 7
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1Lista enlazada simple (continued)
/*
* Lista.h
*
* Created on: 21 de ago. de 2015
5 * Author: santiago
*/
#ifndef LISTA_H_
#define LISTA_H_
10
#include <iostream>
#include "Nodo.h"
using namespace std;
15 class Lista {
Nodo * m_phead;
Nodo * m_plast;
public:
20 Lista();//Constructor por defecto
˜Lista();
void AddLast(int n);//Agregar nodo al final
void AddFront(int n);//Agregar nodo al inicio
void RemoveLast();//Eliminar ultimo nodo
25 void RemoveFront();//Eliminar primer nodo
void Print();//Imprimir
};
#endif /* LISTA_H_ */
AddLast:
Lista enlazada simple Continua en la siguiente pagina. . . Pagina 4 de 7
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1Lista enlazada simple (continued)
AddFront:
RemoveLast:
Lista enlazada simple Continua en la siguiente pagina. . . Pagina 5 de 7
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1Lista enlazada simple (continued)
RemoveFront:
Listing 5: Lista.cpp
/*
Lista enlazada simple Continua en la siguiente pagina. . . Pagina 6 de 7
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1Lista enlazada simple (continued)
* Lista.cpp
*
* Created on: 21 de ago. de 2015
5 * Author: santiago
*/
#include "Lista.h"
10 Lista::Lista() {
m_phead = 0;
m_plast = 0;
}
15 Lista::˜Lista() {
// TODO Auto-generated destructor stub
}
void Lista::AddLast(int n) {
20 Nodo * pNuevo = new Nodo(n);//Crea nuevo puntero a nodo
i f(m_phead == 0){//Evalua si la lista esta vacia
//Asigna el nuevo nodo al puntero de inicio y al de fin
m_phead = m_plast = pNuevo;
}else{
25 //Asigna al m_psig del ultimo nodo la direccion del nuevo nodo
m_plast->setPsig(pNuevo);
m_plast = pNuevo;//Hace que el puntero de fin apunte al nuevo nodo
}
}
30
void Lista::AddFront(int n) {
Nodo * pNuevo = new Nodo(n);//Crea un nuevo puntero a nodo
i f(m_phead == 0){//Evalua si la lista esta vacia
//Asigna el nuevo nodo al puntero de inicio y al de fin
35 m_phead = m_plast = pNuevo;
}else{
//Asigna al m_psig del nuevo nodo la direccion del primer nodo
pNuevo->setPsig(m_phead);
//Hace que el puntero de inicio apunte al nuevo nodo
40 m_phead = pNuevo;
}
}
void Lista::RemoveLast() {
45 i f(m_phead == 0 ){//Evalua si la lista esta vaia
cout<<"La lista esta vacia"<<endl;
}else{
//Crea un nuevo puntero a nodo y le asigna el valor del primer nodo
Nodo * pTemp = m_phead;
50 //Mientras m_psig del nodo temporal sea diferente al ultimo nodo
while(pTemp->getPsig() != m_plast){
//Asigna al nodo temporal el valor del nodo
pTemp = pTemp->getPsig();
}
Lista enlazada simple Continua en la siguiente pagina. . . Pagina 7 de 7
Santiago Lovon Estructura de Datos y Algoritmos ( ): Tarea #1Lista enlazada simple (continued)
55 delete pTemp->getPsig();//Elimina el ultimo nodo
pTemp->setPsig(0);//Limpia m_psig del nodo temporal
m_plast = pTemp;//Asigna el nodo temporal como ultimo nodo
}
60
}
void Lista::RemoveFront() {
//Crea un nuevo nodo y le asigna el valor del primer nodo
65 Nodo * pTemp = m_phead;
//Hace que el primer nodo sea igual al segundo nodo
m_phead = m_phead->getPsig();
delete pTemp;//Elimina el nodo temporal
70 }
void Lista::Print() {
//Crea un nuevo nodo y le asigna el valor del primer nodo
Nodo * pTemp = m_phead;
75 //Mientras el nodo temporal no sea nulo
while(pTemp!= 0 ){
//imprime el valor del nodo temporal
cout<<pTemp->getDato();
//Asigna al nodo temporal el valor del siguiente nodo
80 pTemp = pTemp->getPsig();
}
cout<<endl;
}
Pagina 8 de 7