00001 // LDoble.cpp: implementation of the LDoble class. 00002 // 00003 ////////////////////////////////////////////////////////////////////// 00004 00005 #include "LDoble.h" 00006 00007 ////////////////////////////////////////////////////////////////////// 00008 // Construction/Destruction 00009 ////////////////////////////////////////////////////////////////////// 00010 00011 LDoble::LDoble():Prim(0),Ult(0),CantNodos(0), CantRefs(1) 00012 { 00013 00014 } 00015 00016 LDoble::~LDoble() 00017 { 00018 CantRefs--; 00019 if (CantRefs==0) 00020 Vaciar(); 00021 } 00022 Boolean LDoble::Vacia() 00023 { 00024 if (Prim==0) 00025 return(TRUE); 00026 else 00027 return(FALSE); 00028 } 00029 int LDoble::MoverCte(PNDoble& Cte, char direccion) 00030 { 00031 if (Vacia()==FALSE) { 00032 switch (direccion) { 00033 case 'p':Cte=Prim; 00034 break; 00035 case 'u':Cte=Ult; 00036 break; 00037 case 'a':if (Cte->Ant==0) 00038 return(1); 00039 else 00040 Cte=Cte->Ant; 00041 break; 00042 case 's':if (Cte->Sig==0) 00043 return(1); 00044 else 00045 Cte=Cte->Sig; 00046 break; 00047 default : return(1); 00048 break; 00049 } 00050 return(0); 00051 } 00052 else 00053 { Cte = 0; 00054 return(1);} 00055 } 00056 00057 00058 int LDoble::InsAntes(PNDoble& Cte, TDato dat){ 00059 NDoble *p=new NDoble; 00060 p->Dato=dat; 00061 p->Sig=Cte; 00062 if (Cte!=0) 00063 if (Cte->Ant==0) { 00064 p->Ant=0; 00065 Cte->Ant=p; 00066 Prim=p;} 00067 else { 00068 p->Ant=Cte->Ant; 00069 Cte->Ant->Sig=p; 00070 Cte->Ant=p;} 00071 else{ 00072 Prim=p; 00073 Ult=p; 00074 p->Ant=0; 00075 p->Sig=0; 00076 } 00077 Cte=p; 00078 CantNodos++; 00079 return(0); 00080 } 00081 00082 int LDoble::InsDespues(PNDoble& Cte, TDato dat){ 00083 NDoble *p=new NDoble; 00084 p->Dato=dat; 00085 p->Ant=Cte; 00086 if (Cte!=0) 00087 if (Cte->Sig==0) { 00088 p->Sig=0; 00089 Cte->Sig=p; 00090 Ult=p;} 00091 else { 00092 p->Sig=Cte->Sig; 00093 Cte->Sig->Ant=p; 00094 Cte->Sig=p;} 00095 else{ 00096 Prim=p; 00097 Ult=p; 00098 p->Ant=0; 00099 p->Sig=0; 00100 } 00101 Cte=p; 00102 CantNodos++; 00103 return(0); 00104 } 00105 TDato LDoble::ObtCte(PNDoble Cte){ 00106 return(Cte->Dato);} 00107 00108 int LDoble::ModifCte(PNDoble& Cte, TDato dat){ 00109 if (Cte!=0) { 00110 Cte->Dato=dat; 00111 return(0);} 00112 else 00113 return(1); 00114 } 00115 int LDoble::ElimCte(PNDoble& Cte){ 00116 if (Cte==0) 00117 return(1); 00118 else{ 00119 if (Cte->Sig==0) 00120 Ult=Cte->Ant; 00121 else 00122 Cte->Sig->Ant=Cte->Ant; 00123 if (Cte->Ant==0) 00124 Prim=Cte->Sig; 00125 else 00126 Cte->Ant->Sig=Cte->Sig; 00127 NDoble *p=Cte; 00128 if (Cte->Sig) 00129 Cte=Cte->Sig; 00130 else 00131 Cte=Cte->Ant; 00132 delete p; 00133 CantNodos--; 00134 return(0); 00135 } 00136 } 00137 00138 void LDoble::Vaciar() { 00139 NDoble *p; 00140 PNDoble Cte; 00141 Cte=Prim; 00142 while (Cte) { 00143 p=Cte; 00144 Cte=p->Sig; 00145 delete p; 00146 } 00147 Prim=0; 00148 Ult=0; 00149 CantNodos=0; 00150 } 00151 00152 int LDoble::CantElem() { 00153 return(CantNodos); 00154 }
1.4.1