[C con Clase] duda con lista en C
Armando B. VERA
abvera en arnet.com.ar
Lun Feb 2 01:55:24 CET 2009
SOBRE ESTRUCTURAS DINÁMICAS DE DATOS "EDD"
Parte del siguiente codigo lo extraje del material EDD
de www.conclase.net
----------------------------------------------------------
typedef struct _nodo {
int valor;
struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;
/* Funciones con listas: */
void Insertar(Lista *l, int v);
/* ¿aquí "Lista *l" es lo mismo que "tipoNodo **l" ? */
void Insertar(Lista *lista, int v)
{
pNodo nuevo, anterior;
/* Crear un nodo nuevo */
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->valor = v;
/* Si la lista está vacía */
if(ListaVacia(*lista) || (*lista)->valor > v) {
/* Añadimos la lista a continuación del nuevo nodo */
nuevo->siguiente = *lista;
/* Ahora, el comienzo de nuestra lista es en nuevo nodo */
*lista = nuevo;
}
else {
/* Buscar el nodo de valor menor a v */
anterior = *lista;
/* la pregunta es porque entonces aquí la asignación "anterior =*lista"
no sería posible ya que una es "tipoNodo *anterior" y la otra es
"tipoNodo **lista"
*/
/* Avanzamos hasta el último elemento o hasta que el
siguiente tenga un valor mayor que v */
while(anterior->siguiente && anterior->siguiente->valor <=
v)
anterior = anterior->siguiente;
/* Insertamos el nuevo nodo después del nodo anterior */
nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;
}
}
--------------------------------------------------------------------
Estoy tratando de hacer algo parecido y no encuentro el error.
Este es mi codigo
--------------------------------------------------------------------
/* ************************** palabra.c ******************************* */
/* La idea es que cada letra sea un nodo y se pueda escribir cadenas (palabras) de forma dinámica, sin saber la longitud de la misma. */
#include <stdio.h>
#include <stdlib.h>
typedef struct letra{
char letra;
struct letra *sigLetra;
} tipoLetra;
typedef tipoLetra *pLetra;
typedef tipoLetra *palabra;
void insertarLetra(palabra *p, char l);
int main() {
char c;
palabra pal=NULL;
while((c=getchar())!='\n' || c!='\0') {
insertarLetra(&pal,c);
}
while(pal) {
printf("%d",pal->letra);
pal=pal->sigLetra;
}
}
void insertarLetra(palabra *pal, char l){
pLetra nueva;
pLetra anterior;
anterior=*pal; //aquí es la duda
nueva=(pLetra)malloc(sizeof(tipoLetra));
nueva->letra=l;
while(anterior->sigLetra!=NULL) {
anterior=anterior->sigLetra;
}
anterior->sigLetra=nueva;
}
--
Armando B. VERA
abvera en arnet.com.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090201/96653f94/attachment.html>
Más información sobre la lista de distribución Cconclase