Sie sind auf Seite 1von 4

struct Nodo{

int info;
Nodo* sgte};

int v[4]
3
6
14
25

Lista puntero->campo
a b c d
a
6 c 25
3 b 14 d NULL
Nombre Tipo valor
v vector 3, 6, 14, 25
lista puntero Direccion de memoria a
v[0] int 3
listainfo int 3
listasgte puntero Direccion de memoria b
v[1] int 6
listasgteinfo int 6
listasgtesgte puntero Direccion de memoria C
v[2] int 14
listasgtesgteinfo int 14
listasgtesgtesgte puntero Direccion de memoria D
v[3] int 25
listasgtesgtesgteinfo int 25

Abordaremos distintos patrones para insertar nodos en una lista, supondremos ordenadas en forma creciente.
Abordaremos la implementación con datos simples y luego con plantillas Los patrones a abordar serán:
 Insertar el primer nodo de una lista o delante del primero
 insertar después del ultimo
 Insertar en una posición determinada
 Insertar ordenado  donde corresponda según el criterio de ordenamiento
 buscar un valor en la lista
 insertar ordenado sin repetir la clave
 cambiar el criterio de ordenamiento
 Eliminar nodos
o el primero
o el ultimo
o uno determinado según su valor
o todos los nodos de la estructura
 Mostrar todos los valores de la lista
o eliminando el mostrado
o sin eliminar el mostrado

Insertar primero, Insertar delante del primero  como pila


void push(Nodo* &Pila, int x){ Nodo* insertarDelante(Nodo* &Lista, int x)
Nodo * p = new Nodo(); Nodo * p = new Nodo();
pinfo = x; pinfo = x;
psgte = Pila; psgte = Lista;
Pila = p; Lista = p;
return; return p;
} }

Insertar en medio; Insertar al final


Lista a
A 1 b

B 2 c

Qc

d 4 e
c 3 d
Pe
e 5 NULL

Q x q->info q->sgte q->sgte->info x>q->sgte->info


a 5 1 b 2 V
b 2 c 3

c 3 d 4 v

d 4 NULL

Nodo * p = new Nodo();


p->info = x;
Nodo*q=Lista
while(q->sgte!=NULL && x> q->sgte->info)
q = q->sgte;

p->sgte= q->sgte
q->sgte=p;

Nodo* Insertarordenado(Nodo* &Lista, int x)


Nodo* nuevo = NULL
If (lista == NULL||x<lista->info){
Nuevo= insertarDelante(lista, x);
else
Nuevo = insertarenmedio(lista, x);
return Nuevo;
}

Nodo* Insertarordenado(Nodo* &Lista, int x)


Nodo* nuevo= new Nodo();
Nuevo-info =x;

If (lista == NULL||x<lista->info){
Nuexo->sgte = lista;
Lista = nuevo;

else

Nodo*q=Lista
while(q->sgte!=NULL && x> q->sgte->info)
q = q->sgte;

nuevo->sgte= q->sgte
q->sgte=nuevo;

return Nuevo;
}
Otra alternativa
Insertar ordenado Nodo* insertarOrdenado(Nodo*& lista, int v){

Nodo* nuevo = new Nodo();


nuevo->info = v;
nuevo->sig = NULL;

Nodo* ant = NULL;


Nodo* actual = lista;

while( actual!=NULL && aux->info<v ) {


ant = actual;
actual = actual->sig;
}

if( ant==NULL )
lista = nuevo;
else
ant->sig = nuevo;

nuevo->sig = actual;

return nuevo;
}

Das könnte Ihnen auch gefallen