Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/05/2012, 13:37
Javieer-G
 
Fecha de Ingreso: diciembre-2008
Mensajes: 50
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Esto se puede en c++

Cita:
Iniciado por sam90 Ver Mensaje
Pero que pasaria si se envia dos mensajes a una misma persona?? Deberias buscar otro nombre para el archivo.
Yo lo que haria es crear una lista dinamica. Cuyos nodos tengan los siguientes datos:

destinatario
hora y fecha
mensaje

Si necesitas guardar los daos los metes todos en un mismo archivo. Todos bien compactados.

Si necesitas ayuda en esto no dudes en pedirla! Saludos
Y una vez guardados en el archivo, ¿Cómo los leerias para volver a convertirlos en lista?

Y gus, aquí tengo un ejemplo de lista tipo pila que hice el otro día cuando estudiaba para un ezamen... pero para que deje de ser pila sólo necesitas poder extraer elementos de cualquier parte.

Código C:
Ver original
  1. /*Ejemplo muy sencillo de lista enlazada. En este caso concreto es un LIFO o pila*/
  2.  
  3. #include<stdio.h>
  4. #include<string.h>
  5. #include<stdlib.h>
  6.  
  7. typedef struct lista
  8. {
  9.   char nom[40];
  10.   struct lista *psig;
  11. } lista;
  12.  
  13. lista *pmaestro = NULL; /*Puntero maestro (siempre el primer elemento de la lista)*/
  14.  
  15. /*****************INSERTAR********************/
  16.  
  17. void insertar(char nom[]){
  18. lista *q = (lista*)malloc(sizeof(lista)); /*Crea un puntero en memoria de tipo lista*/
  19. if(q==NULL)printf("Falta memoria");
  20. else{
  21. strcpy(q->nom, nom); /*Copiar la cadena (destino, origen)*/
  22. q->psig = pmaestro; pmaestro = q; /*Asigna el puntero *psig del elemento recien creado al maestro, y el maestro al elemento*/
  23. }
  24. }
  25.  
  26. /*****************IMPRIMIR********************/
  27.  
  28. void imprimir(void){
  29. lista *q = pmaestro; /*Crea un puntero a lista que apunte al último elemento introducido*/
  30. while(q!=NULL) {printf("\n%s", q->nom); q = q->psig;}; /*Imprime el último nombre introducido y pasa el puntero al anterior*/
  31. puts("\n");
  32. }
  33.  
  34. /*******************MAIN**********************/
  35.  
  36. main()
  37. {
  38. puts("Este es un ejemplo de pilas y colas (listas enlazadas)\n");
  39. int i, n;
  40. char nom[40];
  41. puts("Cuantos datos quiere introducir?: ");
  42. scanf("%d", &n);
  43. puts("Ahora introduzca cada uno separado por <Enter>: ");
  44.  
  45. for(i=0; i<n; i++) {gets(nom); insertar(nom);}
  46.  
  47. printf("Los elementos introducidos son: ");
  48. imprimir();
  49. }

En el caso de que quisieras que no fuera una pila como tal sólo tendrías que modificar el hecho de que se puedan borrar archivos intermedios.

Para borrar el succesor de un elemento referenciado por el puntero r, por ejemplo:
Código C:
Ver original
  1. q = r->siguiente;
  2. r->siguiente = q->siguiente;
  3. free(q);

A eso si no tienes el dato referenciado, simplemente buscas el dato con una búsca secuencial que termina cuando encuentra el dato en concreto o o llega al final de la lista...