ayuda en estructuras de datos

zu
25 de Octubre del 2005
Hola

Necesito tu ayuda por favor!!!!!!!!!!!

Necesito hacer un programa de listas enlazadas usando apuntadores con las siguientes caracteristicas:

a)tenga nombre, direccion y telefono

b)ordene alfabeticamente por nombre

c)busque por nombre

d) no se cuantos registros voy a meter porque se usa memoria dinamica

te adjunto archivos que tengo pero que no se implementar una funcion que ordene los nombres alfabeticamente

lo necesito parecido a esto:
#include <stdlib.h>
#include <stdio.h>

typedef struct _nodo {
int valor;
struct _nodo *siguiente;
} tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;

/* Funciones con listas: */
void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);

int ListaVacia(Lista l);

void BorrarLista(Lista *);
void MostrarLista(Lista l);

int main()
{
Lista lista = NULL;
// pNodo p;

Insertar(&lista, 20);
Insertar(&lista, 10);
Insertar(&lista, 40);
Insertar(&lista, 30);

MostrarLista(lista);

Borrar(&lista, 10);
Borrar(&lista, 15);
Borrar(&lista, 45);
Borrar(&lista, 30);
Borrar(&lista, 40);

MostrarLista(lista);

BorrarLista(&lista);

system("PAUSE");
return 0;
}

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;
/* 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;
}
}

void Borrar(Lista *lista, int v)
{
pNodo anterior, nodo;

nodo = *lista;
anterior = NULL;
while(nodo && nodo->valor < v) {
anterior = nodo;
nodo = nodo->siguiente;
}
if(!nodo || nodo->valor != v) return;
else { /* Borrar el nodo */
if(!anterior) /* Primer elemento */
*lista = nodo->siguiente;
else /* un elemento cualquiera */
anterior->siguiente = nodo->siguiente;
free(nodo);
}
}

int ListaVacia(Lista lista)
{
return (lista == NULL);
}

void BorrarLista(Lista *lista)
{
pNodo nodo;

while(*lista) {
nodo = *lista;
*lista = nodo->siguiente;
free(nodo);
}
}

void MostrarLista(Lista lista)
{
pNodo nodo = lista;

if(ListaVacia(lista)) printf("Lista vacían");
else {
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
}
printf("n");
}
}


solo que en c++ y que en lugar de ordenar por v lo haga de acuerdo a un nombre (arreglo o apuntador a una cadena)