Foro Oficial De C++

Lista doble problemas

Buenas

En la facu me pidieron hacer este TP

Se dispone de una lista enlazada doble cuyos nodos tienen el siguiente diseño:
Numero de Vuelo(entero)
Pasajes disponibles (entero)
Puntero al anterior y al sisguiente.
Escriba una funcion que recibiendo el puntero al primero y al ultimo nodos de la lista, elimine los nodos en los que los pasajes disponibles son iguales a 0. Escriba el main para invocar a la funcion.

yo tengo echo esto,

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct pasajes {int vuelo;
int npasaje;};

struct nodo {struct nodo *ant;
struct pasajes datos;
struct nodo *sigui;};


int listavacia (struct nodo *);
struct nodo *nuevonodo ();
struct nodo *creadoble (struct nodo *, struct nodo **, struct pasajes);
void vernodo (struct nodo *);
void reves (struct nodo*);
void borranodo (struct nodo **, struct nodo **,int ); //int o long?

void borranpasajes (struct nodo *,int);

//************************************************** ***************
//************************************************** ***************
void main()
{ struct nodo *ultimo=NULL, *primero=NULL;
struct pasajes x;
long d;
clrscr();
printf ("Ingrese Vuelo (0 para finalizar):");
scanf ("%d",&x.vuelo);
while (x.vuelo)
{
printf ("Ingrese Pasaje:");
scanf("%d",&x.npasaje);
ultimo=creadoble (ultimo,&primero,x);
printf ("Ingrese Vuelo (0 para finalizar):");
scanf ("%d",&x.vuelo);
}
if (listavacia (primero))
{ clrscr();
printf ("No se ingresaron datos");
getch ();exit(0);}
else
{vernodo (primero);
reves (ultimo);






while (primero &&d)
{borranodo (&primero,&ultimo,d);
vernodo (primero) ; reves (ultimo);


}

getch();
}
}
int listavacia (struct nodo *p)
{return (p==NULL);}

struct nodo *nuevonodo()
{struct nodo *p=(struct nodo *) malloc (sizeof (struct nodo));
if (p==NULL)
{printf ("Memoria Insuficiente"); getch();exit(0);}
return p;
}
struct nodo *creadoble (struct nodo *ult, struct nodo **pri, struct pasajes x)
{ struct nodo *p;
p= nuevonodo ();
p->datos=x;
if (listavacia (ult))
{p-> sigui=NULL;
p->ant=NULL;
ult=p;
*pri=p;
}
else
{p-> ant=ult;
p->sigui=NULL;
ult-> sigui=p;
ult =p;
}
return ult;
}

void vernodo (struct nodo *p)
{while (p)
{printf("vuelo:%d, npasaje:%d
",p->datos.vuelo, p->datos.npasaje);
p=p->sigui;
}
}

void reves (struct nodo *p)
{while (p)
{printf("vuelo:%d, npasaje:%d
",p->datos.vuelo, p->datos.npasaje);
p=p->ant;
}
}


void borranodo (struct nodo **pri, struct nodo**ult, int d) //long o int??
{struct nodo *anterior, *actual, *aux;
anterior=actual=*pri;
while (actual&&d!=actual->datos.npasaje)
{anterior=actual;
actual=actual->sigui;}
if (actual==NULL)
{printf("Pasaje Inexistente
");
getch();}
else
{
if (anterior==actual) //borra el primero
{actual=actual->sigui;
if (actual!=NULL)
actual->ant=NULL;
else
*ult=NULL;
*pri=actual;
free(anterior);
}
else
if (actual->sigui==NULL) //borra el ultimo
{*ult=anterior;
anterior->sigui=NULL;
free(actual);
}
{anterior->sigui=actual->sigui;
aux=actual->sigui;
aux->ant=anterior;
free(actual);
}
}
}

pero le falta el IF con la pregunta si los pasajes son 0 y la ordenacion para borrar ya sea al principio de la lista, al medio , o al final, estoy hace una mes ya y no lo puedo hacer y lo tengo que entregar el Lunes, por favor si alguien sabe donde va el IF y el codigo de como hacerlo, MUCHAS GRACIAS.
 
cabuja bienvenid@...
pues en lo q vi.. no tienes en el menú la opción de eliminar tiquetes en 0(eso es lo q t piden), veo q tienes la función eliminar nodos... solo tienes q recorres la lista y cuando lo encuentres aplicas la función borranodo y ya..
 
Si eso ya se, pero no se como hacer para recorrer, que y donde poner el código, me gustaría si alguien sabe el código ya que eso no se hacerlo, gracias
 
algebra de apuntadores que estres.................sin embarga aqui hay algo de documentacion que puede ayudar:
 

Archivos adjuntos

  • Apuntadores C++.pdf
    135 KB · Visitas: 4,194
Bueno haber ...esa vaina de apuntadores es un enredo...gracias a Dios Java y C# no los usan

XXXX................Lo que sucede es que java y C# (hay me da cosa el solo escrin¡birlo) fueron diseñados como lenguajes afines a la web, lo que hace que el manejo de direcciones de memoria se obsoleto, sin embargo y dado que por alguna razon se nos prohiva usar los constructores de estructuras dinamicas (LinkedList, ElementThree...) es posible hacer una simulacion de apuntadores basados en la POO...claro eso resulta una maraña aun peor que el alguebra de apuntadores misma......

Bueno a todas este es el foro de C/C++, asi que toda esta parafernalia es un mero OFF-TOPIC.
 
Otro C++ Fan Boy... Man le cuento ya que hay muchos programadores que viven en mundo paralelo donde creen que C++ es el mejor Lenguaje para desarrollo...pero la realidad es que cuando vas a empreder proyectos comerciales un 97% de estos se realizan orientados a la web y a dispositivos moviles donde indiscutiblemente JAVA, C# y VB tienen el control y no digo con esto que C++ es malo ya que programo en Visual C++.NET y las personas que hallan echos aplicaciones Basadas en MFC y DLL MFC sabran que es un rollo programar grandes aplicaciones basadas en C++
 
Bueno eso de los apuntadores no es lo mas conveniente por estas razones:


  • Programación avanzada, caótica y/o complicada

  • Programación más susceptible de errores muy difíciles de depurar

  • Dificultad para leer y comprender código
Ventajas:

  • Generar elementos bajo demanda, i.e. asignación dinámica de memoria (Se puede hacer sin Apuntadores en cualquier lenguaje y funciona super bien)

  • Manipular y recorrer grandes espacios de memoria (Hay que eliminar la memoria asiganda dinamicamente simpre que se use un apuntador ...Funcking Delete)

  • Generar estructuras de datos complejas (Eso era antes ahora cualquier lenguaje las genera)

  • Parámetros de entrada/salida para funciones, i.e. parámetros por referencia (Eso era antes ahora cualquier lenguaje las genera)
En fin alla el que quiera usarlo..la verdad yo solo lo uso para comunicacion de procesos a bajo nivel y lo demas lo hago en Java....y sino lo hago en .NET
 
EY UN FABOR, DIME COMO AGO PARA DECLARAR UNA VARIABLE CHAR DE ESTA FORMA:
SI YO PONGO UNA VARIABLE EN CHAR ASI: CHAR C[10] Y DESPUES QUIERO ASINARLE UN NOMBRE A ESA VARIABLE POR EJEMPLO: C== LOLO; ASI LO HE INTENTADO Y NO ME CORRE DICE QUE ESTA MAL ASIGNADO LA SINTAXIS.
AYUDAME RESPONDEME A MI CORREO luisfer_3a@hotmail.com
 
Hazlo asi:
La asignación directa sólo está permitida cuando se hace junto con la declaración. Por ejemplo:
char arreglo[4] = "LOLO";

o Tambien asi:

char Arreglo[5];
Arreglo[0] = 'L';
Arreglo[1] = 'O';
Arreglo[2] = 'L';
Arreglo[3] = 'O';

Suerte man...aqui a la orden...y vuelva cuando quiera :)
 
Hola Luis

EY UN FABOR, DIME COMO AGO PARA DECLARAR UNA VARIABLE CHAR DE ESTA FORMA:
SI YO PONGO UNA VARIABLE EN CHAR ASI: CHAR C[10] Y DESPUES QUIERO ASINARLE UN NOMBRE A ESA VARIABLE POR EJEMPLO: C== LOLO; ASI LO HE INTENTADO Y NO ME CORRE DICE QUE ESTA MAL ASIGNADO LA SINTAXIS.
AYUDAME RESPONDEME A MI CORREO luisfer_3a@hotmail.com



Hazlo asi:
La asignación directa sólo está permitida cuando se hace junto con la declaración. Por ejemplo:
char arreglo[4] = "LOLO";

o Tambien asi:

char Arreglo[5];
Arreglo[0] = 'L';
Arreglo[1] = 'O';
Arreglo[2] = 'L';
Arreglo[3] = 'O';

Suerte man...aqui a la orden...y vuelva cuando quiera
smiley%20-%20happy.gif
 
Otro C++ Fan Boy... Man le cuento ya que hay muchos programadores que viven en mundo paralelo donde creen que C++ es el mejor Lenguaje para desarrollo...pero la realidad es que cuando vas a empreder proyectos comerciales un 97% de estos se realizan orientados a la web y a dispositivos moviles donde indiscutiblemente JAVA, C# y VB tienen el control y no digo con esto que C++ es malo ya que programo en Visual C++.NET y las personas que hallan echos aplicaciones Basadas en MFC y DLL MFC sabran que es un rollo programar grandes aplicaciones basadas en C++

Haver esto de los malentendidos ya me esta hartando...asi que aclaremos:

1. No soy ningun c++ fan boy.
2. Deninguna manera discuto que hoy dia las aplicaciones comersiales se desarrollan en su mayoria orientadas a la web.
3. Lo de c#, VB, Visual C++ y todo eso no discuto que sea buenas herramientas, solo que me cahen de patada como php (pero hay estoi aprendiendolo...que se le va ha hacer).
4. Asi como es indudable que las herramientas de alto nivel son las mas eficientes y populares hoy dia, no se puede olvidar la base de bajo nivel que existe en ellas, que uno no se ensucie las manos no significa que no se haga ese trabajo.
5. Lo de que los post pasados que voz y yo colocamos, este que estoy contestando y su respuesta son meros off topics, lo digo porque es verdad, hablar de estos temas en este foro es exactamente hablar fuera de lugar....asi que porque no dejamos esto como esta y ya no mas offtopicy por favor dejen ese cuanto de fan voy que ya me lo han echado como 100 veces y con 100 lenguajes distintos...o sea que soy fan de todo solo porque reconosco las virtudes de cada lenguaje...por favor ahorensen esos comentarios...sale....y hasta aqui.
 
Mis hijos no se mante.... hay una respuesta sencilla para todo esto...

En que lenguaje se desarrollan la mayoria de los SO??....

Eso le dira quien es el PAPA, pero se le ha buscado una manera de simplificar las cosas... el que lo aprende es porque desea tener una buena base para los demas ambientes de desarrollo (lo digo por experiencia ;))...


SuerteX :)
 
Hola que tal amigos... necesito ayuda urgentiiiiiisimo... me keda 1 hr para entregar mi proyecto, y nomas ya no se ke hacer aki...

-Por medio de un arreglo de apuntadores hacer una matriz de 3 x 4, de forma dinamica...
segun yo se hace con malloc...

Y luego ke tenga eso, necesito saber la direccion de cada apuntador... ayuuuuuda... me keda solo 1 hora....
 
Mis hijos no se mante.... hay una respuesta sencilla para todo esto...
En que lenguaje se desarrollan la mayoria de los SO??....
Eso le dira quien es el PAPA, pero se le ha buscado una manera de simplificar las cosas... el que lo aprende es porque desea tener una buena base para los demas ambientes de desarrollo (lo digo por experiencia ;))...
SuerteX :)

La verdad es que todo lo que uno aprenda le va para bien...y si la verdad si se desea hacer un programa robusto y con altos margenes de rendimiento la opcion mas viable es c/c++...como decis el papa de los lenguajes....a proposito de lenguajes y esas cosas..estube leyendo disque se pueden hacer scripst en c++...pero como?????????????????.....ni idea.
 
La verdad es que todo lo que uno aprenda le va para bien...y si la verdad si se desea hacer un programa robusto y con altos margenes de rendimiento la opcion mas viable es c/c++...como decis el papa de los lenguajes....a proposito de lenguajes y esas cosas..estube leyendo disque se pueden hacer scripst en c++...pero como?????????????????.....ni idea.
interesante.... donde leíste eso?
 

Los últimos temas