Está en la página 1de 12

ConceptodePila

Es un tipo especial de lista abierta en la que slosepuedeninsertaryeliminarnodosenuno de los extremos de la lista. Estas operaciones se conocen como "push" y "pop", "empujar" y "tirar".Adems, lasescrituras dedatos siempre soninsercionesdenodos,ylaslecturassiempre eliminanelnodoledo.

ComportamientoLIFO (LastInputFirstOutput)
Elcomportamientoesdeultimaentradaprimera salida.

DeclaracindelNodoParalaPila
typedefstruct_nodo { intdato struct_nodo*siguiente }tipoNodo typedeftipoNodo*pNodo typedeftipoNodo*Pila

Operacionesbsicasconpilas

n Push:Aadirunelementoalfinaldelapila. n Pop:Leeryeliminarunelementodelfinalde

lapila

PUSHinsertarenpilavaca
Elprocesoesmuysimple: 1. nodo>siguienteapunteaNULL. 2. Pilaapunteanodo.

PUSHinsertarenPilanovaca
Seiniciaconunnodoainsertar,conunapuntadorque apunteal,ydeunapila,enestecasonovaca: Elprocesoeselsiguienteysencillo: 1.Hacemosquenodo>siguienteapunteaPila.
2.HacemosquePilaapunteanodo.

POPleeryeliminarunelemento
Partiremosdeunapilaconunoomsnodos,y usaremosunapuntadorauxiliar,nodo:

1de2

POPleeryeliminarunelemento
1. Hacemosquenodoapuntealprimerelementode

lapila,esdeciraPila. 2. AsignamosaPilaladireccindelsegundonodode lapila:Pila>siguiente. 3. Guardamoselcontenidodelnodoparadevolverlo comoretorno,recuerdaquelaoperacinpop equivalealeeryborrar. 4. Liberamoslamemoriaasignadaalprimernodo,el quequeremoseliminar.

2de2

Algor itmodelafuncinPUSH
1. Secreaunnodoparaelvalorquesecolocar

enlapila. 2. Hacemosquenodo>siguienteapunteaPila. 3. HacemosquePilaapunteanodo.

CdigoparaPUSHenunapila
voidPush(Pila*pila,intv) { pNodonuevo/*Crearunnodonuevo*/ nuevo=(pNodo)malloc(sizeof(tipoNodo)) nuevo>valor=v/*Aadirpilaacontinuacindelnuevonodo*/ nuevo>siguiente=*pila/*eliniciodelapilaesennuevonodo*/ *pila=nuevo }

Algor itmodelafuncinPOP
1. Hacemosquenodoapuntealprimerelementodela

pila,esdeciraPila. 2. AsignamosaPilaladireccindelsegundonododela pila:Pila=Pila>siguiente. 3. Guardamoselcontenidodelnodoparadevolverlo comoretorno,recuerdaquelaoperacinpopequivale aleeryborrar. 4. Liberamoslamemoriaasignadaalprimernodo,el quequeremoseliminar.

CdigoparaPOPenunapila
intPop(Pila*pila) { pNodonodo/*variableauxiliarparamanipularnodo*/ intv/*variableauxiliarpararetorno*/ /*Nodoapuntaalprimerelementodelapila*/ nodo=*pila if(!nodo)return0/*Sinohaynodosenlapila retornamos0*/ /*Asignamosapilatodalapilamenoselprimerelemento*/ *pila=nodo>siguiente/*Guardamoselvalorderetorno*/ v=nodo>valor/*Borrarelnodo*/ free(nodo) returnv }

También podría gustarte