Escolar Documentos
Profissional Documentos
Cultura Documentos
LISTAS ENLAZADAS
template <class Tipo> class Lista { typedef nodo<Tipo>* Apuntador; private: nodo<Tipo>* Primero; public: Lista(); nodo<Tipo>* ObtPrimero(); void AsigPrimero(nodo<Tipo>* p); bool Vacia(); bool Llena(); bool InsComienzo(Tipo Valor); bool EliComienzo(Tipo &Valor); bool InsDespues(Apuntador p,Tipo Valor); bool EliDespues(Apuntador p,Tipo &Valor); ~Lista(); nodo<Tipo>* ObtProx(Apuntador p); void AsigProx(Apuntador p,Apuntador q); Tipo ObtInfo(Apuntador p); void AsigInfo(Apuntador p,Tipo Valor); }; #include "Lista.cpp" #endif
"Lista.cpp:
#include <iostream> #include <string> using namespace std; template <class Tipo> nodo<Tipo>* Lista<Tipo>::ObtPrimero(){ return Primero; }; template <class Tipo> void Lista<Tipo>::AsigPrimero(nodo<Tipo>* p){ Primero=p; };
template <class Tipo> Lista<Tipo>::Lista() { Primero=NULL; }; template <class Tipo> bool Lista<Tipo>::Vacia() { return Primero == NULL; }; template <class Tipo> bool Lista<Tipo>::Llena() { nodo<Tipo> *p; p=new nodo<Tipo>; if (p==NULL) return true; else { delete p; return false; } };
Programacin No Numrica I Estructura de Datos
template <class Tipo> nodo<Tipo>* Lista<Tipo>::ObtProx(Apuntador p) { return p->prox; }; template <class Tipo> void Lista<Tipo>::AsigProx(Apuntador p,Apuntador q) { p->prox=q; }; template <class Tipo> Tipo Lista<Tipo>::ObtInfo(Apuntador p) { return p->info; }; template <class Tipo> void Lista<Tipo>::AsigInfo(Apuntador p,Tipo Valor) { p->info=Valor; };
Programacin No Numrica I Estructura de Datos
EJEMPLO:
Codificar un programa que lea por teclado 10 nmeros enteros, y los inserte en una lista por orden de entrada y luego los imprima.
#include "Lista.h" using namespace std; int main(int argc, char *argv[]) { Lista<int> Lista1; nodo<int> *ap; int valor; for(int i=0; i<10;i++) { cout << "Introduzca un numero: " << endl; cin >> valor; if (Lista1.Vacia()) { Lista1.InsComienzo(valor); ap=Lista1.ObtPrimero(); } else { Lista1.InsDespues(ap,valor); ap=Lista1.ObtProx(ap); } }
Programacin No Numrica I Estructura de Datos
ap=Lista1.ObtPrimero(); while(ap!=NULL) { valor=Lista1.ObtInfo(ap); cout << "valor: " << valor << endl; ap=Lista1.ObtProx(ap); } system("PAUSE"); return EXIT_SUCCESS; }
EJEMPLO:
Codificar un programa que lea por teclado 10 nmeros enteros, y los inserte en una lista de manera ordenada.
#include "Lista.h typedef nodo<int>* Apuntador; Lista<int> Lista1; Apuntador ap,sig; int valor,valoraux; int main() { for(int i=1;i<=10;i++) { cout << "Numero :"; cin >> valor; ap=Lista1.ObtPrimero(); if (Lista1.Vacia()) Lista1.InsComienzo(valor); else {
valoraux=Lista1.ObtInfo(Lista1.ObtPrimero()); if (valor<valoraux) Lista1.InsComienzo(valor); else while (ap!=NULL) { sig=Lista1.ObtProx(ap); if (sig==NULL) { Lista1.InsDespues(ap,valor); ap=NULL; } else { valoraux=Lista1.ObtInfo(sig); if (valor<valoraux) { Lista1.InsDespues(ap,valor); ap=NULL; } else ap=sig; }; }; }; }; };