Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error TAD lista ansi c

Estas en el tema de Error TAD lista ansi c en el foro de C/C++ en Foros del Web. Buenas, tengo un problema con esta funcion cuando pido los datos que se van a agregar a la lista, solo inserta el 1ero, y de ...
  #1 (permalink)  
Antiguo 27/06/2011, 13:32
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 9 meses
Puntos: 0
Error TAD lista ansi c

Buenas, tengo un problema con esta funcion cuando pido los datos que se van a agregar a la lista, solo inserta el 1ero, y de ahi en adelante se queda en un ciclo infinito y no tengo la menor idea de porque... ya he movido los indices, he cambiado a incrementar y decrementar pero nada sigue dandome ese problema... les dejo la funcion:

Código:
void insertar(Lista *list,char e,int pos){
int i;

 for(i=list->l+1;i>=pos+1;i--){
	list->elem[i]=list->elem[i-1];
 }
	list->elem[pos]=e;
	list->l++;

}
si necesitan algo mas del codigo pidanlo y lo posteo
  #2 (permalink)  
Antiguo 27/06/2011, 13:53
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Error TAD lista ansi c

Pues vas a tener que poner el código de la estructura Lista para ver como la has creado.
  #3 (permalink)  
Antiguo 27/06/2011, 14:02
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Error TAD lista ansi c

no se como editar post aqui esta la estructura

Código:
typedef struct{
char elem[N];
int l;
}Lista;
  #4 (permalink)  
Antiguo 27/06/2011, 14:10
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Error TAD lista ansi c

La verdad es que no entiendo para que usas una estructura que encapsula un array, si al final estás usando un array estático. Para eso, usa directamente el array estático.

Si lo que quieres es hacer una lista enlazada tienes que usar punteros y memoria dinámica.

Aun así, veo que la función que usas tiene diversos problemas. Especifica exactamente que quieres hacer con esa función (ya se que insertar, pero me refiero a que ocurre si intentas insertar en una posición que está fuera del array, ...)
  #5 (permalink)  
Antiguo 27/06/2011, 14:30
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Error TAD lista ansi c

si se da el caso que se quiera insertar pero no hay espacio disponible, se informa al usuario y no se hacen cambios en la lista... y no es simplemente usar el vector, debo utilizar la lista
  #6 (permalink)  
Antiguo 27/06/2011, 15:01
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Error TAD lista ansi c

una pregunta la variable l de la estructura eseta bien inicializada??
Lo digo porque si ves este codigo que te paso:

Código C:
Ver original
  1. #define N 90
  2.  
  3. typedef struct{
  4. char elem[N];
  5. int l;
  6. }Lista;
  7.  
  8. #include <stdio.h>
  9. void insertar(Lista *list,char e,int pos){
  10. int i;
  11.  
  12.  for(i=list->l+1;i>=pos+1;i--){
  13.     list->elem[i]=list->elem[i-1];
  14.  }
  15.     list->elem[pos]=e;
  16.     list->l++;
  17.  
  18. }
  19.  
  20. int main()
  21. {
  22. Lista a;
  23. a.l = 0;
  24. insertar(&a,10,0);
  25. insertar(&a,11,1);
  26. insertar(&a,12,1);
  27.  
  28. printf("%d %d %d\n ", a.elem[0], a.elem[1], a.elem[2]);
  29. return 0;
  30. }

Cree un main propio, inicialice la variable a cero y me inserto los tres elementos perfectamente.
  #7 (permalink)  
Antiguo 27/06/2011, 15:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Error TAD lista ansi c

lol funciono incluso cuando inserto en posiciones intermedias... no tengo la menor idea de que seria... gracias por su ayuda alex y sam

Etiquetas: indice, lista, segmento, tad, tda, violación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:16.