8
Estructura de Datos y Algoritmos: Tarea #1 Lunes, Agosto 24, 2015 SantiagoLov´on 1

Listas - Estructura de datos

Embed Size (px)

DESCRIPTION

Codigo fuente para implementar listas simples, dobles, pilas y colas en c++.

Citation preview

Page 1: Listas - Estructura de datos

Estructura de Datos y Algoritmos: Tarea #1Lunes, Agosto 24, 2015

Santiago Lovon

1

Page 2: Listas - Estructura de datos

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

Page 3: Listas - Estructura de datos

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

Page 4: Listas - Estructura de datos

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

Page 5: Listas - Estructura de datos

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

Page 6: Listas - Estructura de datos

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

Page 7: Listas - Estructura de datos

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

Page 8: Listas - Estructura de datos

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