Para todas las acciones, Cab es un apuntador al primer nodo de la lista
Utilizaremos una notación para usarla en nuestros algoritmos de tal modo que estas sean independientes de cualquier lenguaje de programación.
Si P es un apuntador (puntero) del tipo NODO entonces P.Val hace referencia a la parte valor (información) del nodo apuntado por P de la misma manera P.Sgte hace referencia a la parte dirección siguiente del nodo apuntado por P..
En esta oportunidad implemento una lista dinamica, pero queda de antemano que existe la implementacion de lista estatica , osea usando vectores , haber si alguien lo obtine por alli , o mas aplicaciones de listes simples , hay tambien listas dobles y logicamente la lista circular , en esta oportunidad les dejo operaciones de listas simples.
ATTE : ANTON RAMIREZ , LEONARDO VLADIMIR (ALUMNO UNI)
Crea una lista enlazada de simple anadiendo nodos de numeros pares al final de la lista.
Código
[li]// Aqui NODO debe ser global porque pude declararse en cualquier parte del programa struct NODO { int Val; NODO *Sgte; }; //Crea una lista vacia void CrearLista (NODO **Cab, NODO **Final); // Crea una Lista de numeros Pares anadiendo al final de la lista void CrearLPares(NODO **Cab, NODO **Final); // Muestra la Lista void MostrarLPares(NODO *Cab); // Predicado que devuelve verdad si X es Par y falso en otro caso bool VrfcaPar(int x); // Funcion principal int main() { NODO *L1; // Apuntador de tipo NODO para apuntar al primer elemento de la lista NODO *U1; // Apuntador de tipo NODO para apuntar al ultimo elemento de la lista //Creamos la lista L1 vacia CrearLista(&L1, &U1); // Llenamos la lista L1 con elementos pares CrearLPares(&L1, &U1); //Mostramos la lista L1 de pares MostrarLPares(L1); return(0); } void CrearLista (NODO **Cab, NODO **Final) { *Cab=NULL; *Final=NULL; } void CrearLPares(NODO **Cab, NODO **Final) { int Num, Ctdor, i; NODO *P; Ctdor = 0; i = 1; //system("CLS"); cout <<"Cuanto numeros pares desea ingresar " ; cin >>Num; while(Ctdor < Num) { if(VrfcaPar(i)) { cout<<"Elemento ---> "<<i<<endl; //P = new NODO; // Que pasa si no hay memoria suficiente ? if(*Cab == NULL) { P->Val = i; P->Sgte=NULL; *Cab = P; *Final =P; } else { P->Val = i; P->Sgte=NULL; (*Final)->Sgte = P; } *Final = P; //(*Final)->Sgte = NULL; Ctdor = Ctdor + 1; } i = i + 1; } } bool VrfcaPar(int x) { if(x%2 == 0) { return(true); } else { return(false); } } void MostrarLPares(NODO *Cab) { //system("CLS"); // Utilizamos una variable auxiliar para desplazarnos en la lista NODO *P; P = Cab; while(P != NULL) { cout<<P->Val<<" "; P = P->Sgte; } cout<<">"<<endl; }[/color][/li] [li][/li] [/list]
Código:
// Listas Dobles
using namespace std;
typedef int TD;// crea un sinomino de int
struct NODO
{
TD val;
NODO *ante;
NODO *sgte;
};
void crearLista(NODO **Cabi, NODO **Cabu);// doble apúntador porque *cab es apuntador
void insertarIni(NODO **Cabi,NODO **Cabu, TD dato);
void mostrarNodos(NODO *Cabi);
int main()
{
NODO *ai, *au;
crearLista(&ai, &au);
insertarIni(&ai,&au, 10);
insertarIni(&ai,&au, 20);
insertarIni(&ai,&au, 30);
mostrarNodos(ai);
cout <<("\n\n");
system("pause");
return(0);
}
void crearLista(NODO **Cabi, NODO **Cabu)// doble apúntador porque *cab es apuntador
{
*Cabi=NULL;
*Cabu=NULL;
}
void insertarIni(NODO **Cabi,NODO **Cabu, TD dato)
{
NODO * p;
p=(NODO*)malloc(sizeof(NODO));//MALLOC DEVUELVE LA VARIABLE NO A VOID SINO A NODO
if(p==NULL){// hubo exito en la separacion de memoria
printf("nO HAY espacio en la RAM");
exit(0);
}
else{
p->val=dato;
p->ante=NULL;
p->sgte=NULL;
if(*Cabi==NULL){
*Cabi=p;
*Cabu=p;
}
else{
p->sgte=*Cabi;
(*Cabi)->ante=p;//ya que el * y -> tienen la misma prioridad.
*Cabi=p;
}
}
}
void mostrarNodos(NODO *Cabi)
{
NODO *p;
p=Cabi;
while(p!=NULL){//si pusiera p->sgte!=NULL no mostraria al 10 yaq psgte no existe
cout << p->val<<",";
p=p->sgte;
}
} [/code=c]
using namespace std;
typedef int TD;// crea un sinomino de int
struct NODO
{
TD val;
NODO *ante;
NODO *sgte;
};
void crearLista(NODO **Cabi, NODO **Cabu);// doble apúntador porque *cab es apuntador
void insertarIni(NODO **Cabi,NODO **Cabu, TD dato);
void mostrarNodos(NODO *Cabi);
int main()
{
NODO *ai, *au;
crearLista(&ai, &au);
insertarIni(&ai,&au, 10);
insertarIni(&ai,&au, 20);
insertarIni(&ai,&au, 30);
mostrarNodos(ai);
cout <<("\n\n");
system("pause");
return(0);
}
void crearLista(NODO **Cabi, NODO **Cabu)// doble apúntador porque *cab es apuntador
{
*Cabi=NULL;
*Cabu=NULL;
}
void insertarIni(NODO **Cabi,NODO **Cabu, TD dato)
{
NODO * p;
p=(NODO*)malloc(sizeof(NODO));//MALLOC DEVUELVE LA VARIABLE NO A VOID SINO A NODO
if(p==NULL){// hubo exito en la separacion de memoria
printf("nO HAY espacio en la RAM");
exit(0);
}
else{
p->val=dato;
p->ante=NULL;
p->sgte=NULL;
if(*Cabi==NULL){
*Cabi=p;
*Cabu=p;
}
else{
p->sgte=*Cabi;
(*Cabi)->ante=p;//ya que el * y -> tienen la misma prioridad.
*Cabi=p;
}
}
}
void mostrarNodos(NODO *Cabi)
{
NODO *p;
p=Cabi;
while(p!=NULL){//si pusiera p->sgte!=NULL no mostraria al 10 yaq psgte no existe
cout << p->val<<",";
p=p->sgte;
}
} [/code=c]