C/Visual C - listasssssss

 
Vista:

listasssssss

Publicado por fabi (32 intervenciones) el 08/05/2007 23:33:09
alguien me podrai decir por que le siguiente codigo esta mal

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>

struct nodo{
int a;
nodo *cab;};

nodo *siguiente,*final,*aux;

main(){
final=NULL;
int i,k;
for (i=1;i<=100;i++){
siguiente=new nodo;
siguiente->a=i;
siguiente->cab=final;
siguiente=final;}

for(i=1; i<50; i++){
printf("%d",siguiente->a);
siguiente->cab=siguiente;}
getch();}

esta en dev pero creo qeu funciona en visual buen el problema es qeu cuando compilo sale un erro r lo que pretendo es que como ya se crearon los nodos y ya se ah dado un valor a cada uno en el miembro a en el segundo for me imprima los numeros del 1 al 49 por favor agradeceria su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:listasssssss

Publicado por Nelek (816 intervenciones) el 09/05/2007 10:07:56
Hola,

no estoy muy puesto con la programacion de listas, mas bien en su uso, pero...

Por un lado (aunque esto no tiene que ver con la lista), estas creando un monton de punteros con el "new" pero no has puesto el delete en ningun sitio, no te da fallos de "memory leak"??

En cuanto a lo de la lista... Primero dices que siguiente es nuevo, le das el valor entero a la "a" y luego dices que "cab" es nulo, y luego anulas el "siguiente". Que yo tenga entendido las listas enlazan un elemento con el siguiente, y tu estas diciendo en cada punto que su siguiente elemento apunta a ningun sitio. Ademas, al acabar el primer for "siguiente" es NULL asi que cuando entras en el segundo for no estas apuntando a ningun sitio.

Teoricamente las listas tienen que tener un nodo inicial donde el nodo previo es siempre nulo y el nodo siguiente puede o no serlo (si solo hay un elemento), el nodo final tiene es al reves, el puntero previo no es nulo (si hay mas de uno) pero el puntero siguiente siempre lo es.

En el fichero AfxTempl.h de las MFC pone que:

// CList<TYPE, ARG_TYPE>

template<class TYPE, class ARG_TYPE>
class CList : public CObject
{
protected:
struct CNode
{
CNode* pNext;
CNode* pPrev;
TYPE data;
};
public:
//... Mas cosas

protected:
CNode* m_pNodeHead;
CNode* m_pNodeTail;
int m_nCount;
CNode* m_pNodeFree;
struct CPlex* m_pBlocks;
int m_nBlockSize;

CNode* NewNode(CNode*, CNode*);
void FreeNode(CNode*);

Espero que te ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listasssssss

Publicado por Diego (1 intervención) el 09/05/2007 17:40:46
Buenas.

Bueno voy a hacer dos comentarios.

El primero va dirigido a fabi. Nelek tiene razon (en parte).
Por un lado, es verdad que lo que estas haciendo es hacer que todos los punteros apunten a NULL. Creo que tu equivocacion esta en la ultima linea del primer for. En vez de hacer siguiente = final, haz final = siguiente.
Por otro lado, creo que si bien no esta bien que no libere la memoria (despues de usar), en este caso, el programa va a finalizar y se le van a desasignar esas porciones de memoria.

El segundo va para Nelek.
No se exactamente lo que desea hacer fabi, sin embargo, la implementacion que el muestra es la de una pila, mientras que la implementacion que vos pasaste parece una cola.

Saludos, Diego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listasssssss

Publicado por Nelek (816 intervenciones) el 10/05/2007 07:39:31
Mmmm,

como ya comente en otro mensaje, no vengo de informatica asi que a veces me lio con los "nombres teoricos". Me puedes relacionar ambos terminos con elementos de las MFC? Por ejemplo, lo que yo pastee (parte de una CList) es una cola segun me has corregido tu. A que elemento podria comparar la pila???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listasssssss

Publicado por Diego (13 intervenciones) el 10/05/2007 19:22:44
Buenas.

Se denominan de distintas maneras por la forma en que se agregan y sacan elementos.

Las pilas se llaman asi porque apilas los elementos (el ejemplo comun es una pila de platos donde agregas y sacas platos de la cima).

Las colas se llaman asi porque formas una cola con los elementos (como la cola de un banco donde si llegas ultimo estas en la ultima posicion y el que sale es de la primera posicion)

Saludos, Diego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listasssssss

Publicado por Nelek (816 intervenciones) el 11/05/2007 10:32:35
Entonces... lo que yo puse no es ni una ni otra. Yo puse la definicion de una CList de las MFC donde puedes incluir los elementos al final con AddTail, al principio con AddHead, donde quieras con InsertBefore o InsertAfter, tomar el que quieras con GetAt y quitar el elemento de donde quieras mediante con RemoveAt, y mas cosas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listasssssss

Publicado por x (63 intervenciones) el 11/05/2007 15:03:54
struct NODO
{
int a;
nodo *cab;
};
...
NODO* InsertarEnNodo(NODO {*|&}nodo, int valor)
{
if (nodo != null)
nodo = nodo->cab;
nodo = new NODO;
nodo->a = valor;
return nodo;
}
...
for (int i = 0; i < 100; i++)
nodo = InsertarEnNodo(nodo, i);
...

Tengo un buen sin programar en C, por lo que no recuerdo si en el parametro de NODO lleva * o &... ¿seria algo asi?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:listasssssss

Publicado por Nelek (816 intervenciones) el 22/05/2007 11:42:58
deberia llevar *

y si, tiene buena pinta, aunque no lo he probado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar