EL MUNDO DE LA PROGRAMACION ``LISTA``

Page 1

EL DELA PROGRAMACION

L I S T A

CABUDARE, 20 DE NOVIEMBRE DEL 2022 EDICION N° 03
ÎNDICE 01 LISTA 02 TIPOS DE LISTAS OPERACIONES BASICAS 04 07 LISTA LINEALMENTE ENCADENADA. 09 ENTRETENIMIENTO
Una lista es una estructura dinámica de datos que contiene una colección de elementos homogéneos (del mismo tipo) de manera que se establece entre ellos un orden. Es decir, cada elemento, menos el primero, tiene un predecesor, y cada elemento, menos el último, tieneunsucesor.
estructuras
veremos
la siguiente
PAG. 01 LISTA LISTA
Tanto las
vistas en la sección anterior (pilas) como las que
en
(colas)sontiposdelistas. Ejemplo :

Listas simples enlazadas

Es una lista enlazada de nodos, donde cada nodo tiene un único campo de enlace. Una variable de referencia contiene una referencia al primer nodo, cada nodo (excepto el último) enlaza con el nodo siguiente, y el enlace del último nodo contiene NULL para indicar el final de la lista. Aunque normalmente a la variable de referencia se la suele llamar top, se le podría llamar como se desee

Listas doblemente enlazadas

Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o lista enlazadas de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor NULL si es el primer nodo; y otro que apunta al nodo siguiente, o apunta al valor NULL si es el último nodo.

Listas enlazadas circulares

En una lista enlazada circular, el primer y el último nodo están unidos juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier dirección hasta que se regrese hasta el nodo original. Desde otro punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar todos los nodos de una lista a partir de uno dado

Listas enlazadas circulares

Listas enlazadas simples circulares Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el siguiente nodo del último apunta al primero. Como en una lista enlazada simple, los nuevos nodos pueden ser solo eficientemente insertados después de uno que ya tengamos referenciado. Por esta razón, es usual quedarse con una referencia solamente al último elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al principio, y también permite accesos al primer nodo desde el puntero del último nodo.

PAG.02
PAG. 03

Operaciones básicas de lista Insertar eliminar Estar vacia

1
3 PAG. 04
2
PAG. 05
PAG.06

Listas linealmente encadenada

#include <iostream> #include <stdlib.h> using namespace std;

struct nodo{ int nro; // en este caso es un numero entero struct nodo *sgte; };

typedef struct nodo *Tlista; void insertarInicio(Tlista &lista, int valor)

{ Tlista q; q = new(struct nodo); q->nro = valor; q->sgte = lista; lista = q; }

void insertarFinal(Tlista &lista, int valor)

{ Tlista t, q = new(struct nodo); q->nro = valor; q->sgte = NULL; if(lista==NULL) { lista = q; } else { t = lista; while(t->sgte!=NULL) { t = t->sgte; } t->sgte = q; } } int insertarAntesDespues() { int _op, band; cout<<endl; cout<<"\t 1. Antes de la posicion "<<endl; cout<<"\t 2. Despues de la posicion "<<endl; cout<<"\n\t Opcion : "; cin>> _op; if(_op==1) band = -1; else band = 0; return band; }

void insertarElemento(Tlista &lista, int valor, int pos) { Tlista q, t; int i; q = new(struct nodo); q->nro = valor; if(pos==1) { q->sgte = lista; lista = q; } else { int x = insertarAntesDespues(); t = lista; for(i=1; t!=NULL; i++) { if(i==pos+x) { q->sgte = t->sgte; t->sgte = q; return; } t = t->sgte; } } cout<<" Error...Posicion no encontrada..!"<<endl; }

Parte 1

void buscarElemento(Tlista lista, int valor) { Tlista q = lista; int i = 1, band = 0; while(q!=NULL) { if(q->nro==valor) { cout<<endl<<" Encontrada en posicion "<< i <<endl; band = 1; } q = q->sgte; i++; }

if(band==0) cout<<"\n\n Numero no encontrado..!"<< endl; }

void reportarLista(Tlista lista) { int i = 0; while(lista != NULL) { cout <<' '<< i+1 <<") " << lista->nro << endl; lista = lista->sgte; i++; } }

void eliminarElemento(Tlista &lista, int valor) { Tlista p, ant; p = lista; if(lista!=NULL) { while(p!=NULL) { if(p->nro==valor) { if(p==lista) lista = lista->sgte; else ant->sgte = p->sgte; delete(p); return; } ant = p; p = p->sgte; } } else cout<<" Lista vacia..!"; }

void eliminaRepetidos(Tlista &lista, int valor) { Tlista q, ant; q = lista; ant = lista; while(q!=NULL) { if(q->nro==valor) { if(q==lista) // primero elemento { lista = lista->sgte; delete(q); q = lista; } else { ant->sgte = q->sgte; delete(q); q = ant->sgte; } } else { ant = q; q = q->sgte; }

}// fin del while cout<<"\n\n Valores eliminados..!"<<endl; }

Parte 2 PAG.07

{

void menu1()

{ cout<<"\n\t\tLISTA ENLAZADA SIMPLE\n\n"; cout<<" 1. INSERTAR AL INICIO "<<endl; cout<<" 2. INSERTAR AL FINAL "<<endl; cout<<" 3. INSERTAR EN UNA POSICION "<<endl; cout<<" 4. REPORTAR LISTA "<<endl; cout<<" 5. BUSCAR ELEMENTO "<<endl; cout<<" 6. ELIMINAR ELEMENTO 'V' "<<endl; cout<<" 7. ELIMINAR ELEMENTOS CON VALOR 'V' "<<endl; cout<<" 8. SALIR "<<endl; cout<<"\n INGRESE OPCION: "; }

/* Funcion Principal ---------------------------------------------------------------------*/

int main()

Tlista lista = NULL; int op; // opcion del menu int _dato; // elemenento a ingresar int pos; // posicion a insertar

system("color 0b"); do { menu1(); cin>> op; switch(op) { case 1:

cout<< "\n NUMERO A INSERTAR: "; cin>> _dato; insertarInicio(lista, _dato); break; case 2:

PAG. 04

cout<< "\n NUMERO A INSERTAR: "; cin>> _dato; insertarFinal(lista, _dato ); break; case 3:

cout<< "\n NUMERO A INSERTAR: ";cin>> _dato; cout<< " Posicion : "; cin>> pos; insertarElemento(lista, _dato, pos); break; case 4:

cout << "\n\n MOSTRANDO LISTA\n\n"; reportarLista(lista); break; case 5:

cout<<"\n Valor a buscar: "; cin>> _dato; buscarElemento(lista, _dato); break; case 6:

cout<<"\n Valor a eliminar: "; cin>> _dato; eliminarElemento(lista, _dato); break; case 7:

cout<<"\n Valor repetido a eliminar: "; cin>> _dato; eliminaRepetidos(lista, _dato); break; }

cout<<endl<<endl; system("pause"); system("cls"); }while(op!=8);

system("pause"); return 0; }

PAG. 08
Partes 3 y ultima Pero 100% funcional en programador C++
PAG. 09
Autor: RobertoJ.BaptistaS.

Turn static files into dynamic content formats.

Create a flipbook

Articles inside

Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.