Páginas: [1]
|
 |
|
Autor
|
Tema: Uso de vectores de colas. (Leído 384 veces)
|
Gorky
Desconectado
Mensajes: 677
|
Buenas foreros. Estoy trabajando con pilas, listas y colas y sin problema. Hasta ahora estaba usando punteros para el uso de las colas. Sin embargo ahora se me pide usar un vector de punteros para tener 5 colas. Necesito enviar el vector de las 5 colas y lo estoy haciendo asi: void InsertarProceso(pCola *primero[],pCola *ultimo[]) aunque no se si sera correcto. Dentro de esa funcion llamo a la funcion propia de añadir un nodo de la siguiente forma: Anadir(primero[i], ultimo[i], valor); Pero no se como seria la llamada a la funcion InsertarProceso. Espero me podais ayudar. Muchas gracias por cualquier colaboracion. Nota: El post ya ha sido corregido.
|
|
|
|
« Última modificación: 13 Abril 2008, 15:22 por Gorky »
|
En línea
|
"El Hacker no nace Hacker, sino con la curiosidad bajo el brazo, luego se hace Hacker, cuando aprovecha esa sed de conocimientos y habilidad innata para aplicarlos y estudia, aprende, aplica y crea."
|
|
|
Flakito81
Desconectado
Mensajes: 350
|
Le tendrías que pasar las posiciones a los diferentes arrays de punteros a pCola.
Anadir (&primero[0], &ultimo[0], 20); <-- le he añadido el valor a insertar Quizas te interese usar macros del tipo #define COLA_1 0 Anadir(&primero[COLA_1], &ultimo[COLA_1], 20);
Un saludo!
|
|
|
|
|
En línea
|
|
|
|
Gorky
Desconectado
Mensajes: 677
|
Claro es que lo que he puesto antes esta mal. En realidad tengo el siguiente prototipo: void InsertarProceso(pCola *primero[],pCola *ultimo[]); con el que quiero que se envie el vector y dentro llamo asi a la funcion: Anadir(primero[i],ultimo[i], valor); El problema lo tengo al querer llamar a la funcion InsertarProceso.
|
|
|
|
|
En línea
|
"El Hacker no nace Hacker, sino con la curiosidad bajo el brazo, luego se hace Hacker, cuando aprovecha esa sed de conocimientos y habilidad innata para aplicarlos y estudia, aprende, aplica y crea."
|
|
|
Flakito81
Desconectado
Mensajes: 350
|
Pega algo mas de código y los errores. Tal cual es el prototipo la llamada debería ser InsertarProceso(&primero[0],&ultimo[0]); PD: en la llamada a Anadir dentro de la funcion insertarProceso sería igual que cuando trabajabas con una unica lista, no tienes q pasar indices
|
|
|
|
« Última modificación: 13 Abril 2008, 15:29 por Flakito81 »
|
En línea
|
|
|
|
Gorky
Desconectado
Mensajes: 677
|
Pega algo mas de código y los errores. Tal cual es el prototipo la llamada debería ser InsertarProceso(&primero[0],&ultimo[0]); PD: en la llamada a Anadir dentro de la funcion insertarProceso sería igual que cuando trabajabas con una unica lista, no tienes q pasar indices Creo que lo has entendido al contrario. La funcion de InsertarProceso debe recibir el vector de colas y la funcion Anadir (llamada desde InsertarProceso) debe recibir la cola y el valor que se va a añadir. Por lo tanto InsertarProceso no lleva indices y Anadir si.
|
|
|
|
|
En línea
|
"El Hacker no nace Hacker, sino con la curiosidad bajo el brazo, luego se hace Hacker, cuando aprovecha esa sed de conocimientos y habilidad innata para aplicarlos y estudia, aprende, aplica y crea."
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 121
|
Buenas Primero que nada yo lo que haria seria una estructura con la cabeza y la cola de la cola.Asi el paso de argumentos te queda mas "prolijos". Tambien cambie el tipo de retorno. Esto te va a permitir controlar en caso de que la funcion falle. Con respecto a tu problema, fijate en el code que te dejo aca abajo.Contiene todas las sugerencias que mencione /* headers que necesites */ typedef struct node{ int info; struct node *next; }node_t; typedef struct queue{ node_t *head; node_t *tail; }queue_t; /* Demas structs */ int add(queue_t *queue, int info); /* Otras funciones */ int main(void){ queue_t queues[NUM]; /* Las demas variables locales */ /* Inicializacion de las colas*/ /* queues es un puntero por ser un vector. * Al sumarle i te da un puntero a la i-esima queue del vector */ if(add(queues + i, info)){ perror("add"); exit(EXIT_FAILURE); } /* Demas operaciones que tengas que hacer */ exit(EXIT_SUCCESS); } Saludos, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
Gorky
Desconectado
Mensajes: 677
|
ҒrƒÃƒ¿ƒÈƒ®ƒÇ„yÝ, entiendo perfectamente el codigo que me pasas pero esa no es mi situacion. En tu codigo hay un vector de punteros y vas llamando a la funcion ADD desde el main, pasandole como argumento cada uno de los elementos del vector. Sin embargo mi caso no es ese. Yo tengo una funcion que recibe el vector completo y dentro de esta funcion se llama a la funcion ADD, ya si pasandole cada elemento del vector. Espero haberme explicado.
|
|
|
|
|
En línea
|
"El Hacker no nace Hacker, sino con la curiosidad bajo el brazo, luego se hace Hacker, cuando aprovecha esa sed de conocimientos y habilidad innata para aplicarlos y estudia, aprende, aplica y crea."
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 121
|
ҒrƒÃƒ¿ƒÈƒ®ƒÇ„yÝ, entiendo perfectamente el codigo que me pasas pero esa no es mi situacion. En tu codigo hay un vector de punteros y vas llamando a la funcion ADD desde el main, pasandole como argumento cada uno de los elementos del vector. Sin embargo mi caso no es ese. Yo tengo una funcion que recibe el vector completo y dentro de esta funcion se llama a la funcion ADD, ya si pasandole cada elemento del vector. Espero haberme explicado.
Es lo mismo nada mas que haces un nivel mas de llamada. Si no te funciona agregale el & adelante de queues, y listo Saludos, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
Gorky
Desconectado
Mensajes: 677
|
Asi es como estoy intentando llamarlo: InsertarProceso(&primero,&ultimo); Pero me dice: passing arg 1 of `InsertarProceso' from incompatible pointer type passing arg 2 of `InsertarProceso' from incompatible pointer type
|
|
|
|
|
En línea
|
"El Hacker no nace Hacker, sino con la curiosidad bajo el brazo, luego se hace Hacker, cuando aprovecha esa sed de conocimientos y habilidad innata para aplicarlos y estudia, aprende, aplica y crea."
|
|
|
Flakito81
Desconectado
Mensajes: 350
|
#include <stdio.h> #define NUM 6 typedef struct pCola { int valor; struct pCola *next; }pCola; void Anadir(pCola **primero, pCola **ultimo, int valor) { //codigo } void InsertarProceso(pCola **primero, pCola **ultimo) { //-- codigo --- Anadir (&primero[0], &ultimo[0], 20); //-- resto del codigo --- } int main () { pCola *primero[NUM]; pCola *ultimo[NUM]; InsertarProceso(primero, ultimo); return 0; } Suerte!
|
|
|
|
|
En línea
|
|
|
|
Gorky
Desconectado
Mensajes: 677
|
Si no me equivoco, la funcino Anadir no tendria ese prototipo sino este: void Anadir(pCola *primero, pCola *ultimo, int valor); ya que lo que recibe son dos punteros y no dos vectores de punteros. Al intentar llamar a InsertarProceso tal y como tu lo haces sigue dando el mismo error: passing arg 1 of `InsertarProceso' from incompatible pointer type passing arg 2 of `InsertarProceso' from incompatible pointer type
|
|
|
|
|
En línea
|
"El Hacker no nace Hacker, sino con la curiosidad bajo el brazo, luego se hace Hacker, cuando aprovecha esa sed de conocimientos y habilidad innata para aplicarlos y estudia, aprende, aplica y crea."
|
|
|
Flakito81
Desconectado
Mensajes: 350
|
Pues le kitas el ampersand, asi de simple. #include <stdio.h> #define NUM 6 typedef struct pCola { int valor; struct pCola *next; }pCola; void Anadir(pCola *primero, pCola *ultimo, int valor) { //codigo } void InsertarProceso(pCola **primero, pCola **ultimo) { //-- codigo --- Anadir (primero[0], ultimo[0], 20); //-- resto del codigo --- } int main () { pCola *primero[NUM]; pCola *ultimo[NUM]; InsertarProceso(primero, ultimo); return 0; } Suerte! PD: El codigo está compilado, asi que no da errores!
|
|
|
|
|
En línea
|
|
|
|
Leber
Desconectado
Mensajes: 261
"Las estrellas se apagan..."
|
Si la estructurava a sufrir modificaciones, no seria mejor pasarlo por rerefencia?
con el &?
Es solo una duda, saludos
|
|
|
|
|
En línea
|
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 121
|
Buenas Si la estructurava a sufrir modificaciones, no seria mejor pasarlo por rerefencia?
con el &?
Es solo una duda, saludos
Depende de lo que quieras hacer. Si queres modificar un valor de alguna posicion del vector nada mas puede que no necesites, pero si queres agrandar el vector por ejemplo, seguramente necesitaras el & porque eso implica tener que modificar al vector y no a datos contenidos en las posiciones. Nose si me explique bien jeje Saludos, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
|
Páginas: [1]
|
|
|
|