NECESITO 2 PROGRAMAS PARA MAÑANA ME URGEN!!!!!!!!!!

PRISCILA
26 de Julio del 2004
necesito que me ayuden a meterle la opcion borrar a mi programa de agenda de un celular esto es lo que llevo hecho pero nose como hacer que borre un registro seleccionado por mi , el programa ya esta hecho pero no borra los registros que yo selecciono.
#include <stdio.h>

struct _agenda {
char nombre[20];
char telefono[12];
struct _agenda *siguiente;
};

struct _agenda *primero, *ultimo;

void mostrar_menu() {
printf("nnMenú:n=====nn");
printf("1.- Añadir elementosn");
printf("2.- Borrar elementosn");
printf("3.- Mostrar listan");
printf("4.- Salirnn");
printf("Escoge una opción: ");fflush(stdout);
}

/* Con esta función añadimos un elemento al final de la lista */
void anadir_elemento() {
struct _agenda *nuevo;

/* reservamos memoria para el nuevo elemento */
nuevo = (struct _agenda *) malloc (sizeof(struct _agenda));
if (nuevo==NULL) printf( "No hay memoria disponible!n");

printf("nNuevo elemento:n");
printf("Nombre: "); fflush(stdout);
gets(nuevo->nombre);
printf("Teléfono: "); fflush(stdout);
gets(nuevo->telefono);

/* el campo siguiente va a ser NULL por ser el último elemento
de la lista */
nuevo->siguiente = NULL;

/* ahora metemos el nuevo elemento en la lista. lo situamos
al final de la lista */
/* comprobamos si la lista está vacía. si primero==NULL es que no
hay ningún elemento en la lista. también vale ultimo==NULL */
if (primero==NULL) {
printf( "Primer elementon");
primero = nuevo;
ultimo = nuevo;
}
else {
/* el que hasta ahora era el último tiene que apuntar al nuevo */
ultimo->siguiente = nuevo;
/* hacemos que el nuevo sea ahora el último */
ultimo = nuevo;
}
}

void mostrar_lista() {
struct _agenda *auxiliar; /* lo usamos para recorrer la lista */
int i;

i=0;
auxiliar = primero;
printf("nMostrando la lista completa:n");
while (auxiliar!=NULL) {
printf( "Nombre: %s, Telefono: %sn",
auxiliar->nombre,auxiliar->telefono);
auxiliar = auxiliar->siguiente;
i++;
}
if (i==0) printf( "nLa lista está vacía!!n" );
}

int main() {
char opcion;

primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do {
mostrar_menu();
opcion = getch();
switch ( opcion ) {
case '1': anadir_elemento();
break;
case '2': printf("No disponible todavía!n");
break;
case '3': mostrar_lista(primero);
break;
case '4': exit( 1 );
default: printf( "Opción no válidan" );
break;
}
} while (opcion!='4');
}
por favor ayudenme se los agradecere si me los puedes mandar hoy mismo te lo agradeceré mas me super urge

y el otro es almacenar6 elementos en un arreglo de 10 espacios de memoria , y que pueda insertar un elementoen lcualquier dirreccion y sila dirrecion esta ocupada que lo inserte y recorra los demás elementos esto es lo que llevo hecho
- Declaración: (
struct listaDE
{
int clave;
struct listaDE *ant,
*sig;
};

- Procedimiento de creación:
void crearDE(struct listaDE **LDE)
{
*LDE = (struct listaDE *) malloc(sizeof(struct listaDE));
(*LDE)->sig = (*LDE)->ant = *LDE;
}

- Procedimiento de inserción:
void insertarDE(struct listaDE *LDE, int elem)
{
struct listaDE *actual, *nuevo;

/* busca */
actual = LDE->sig;
LDE->clave = elem;

while (actual->clave < elem)
actual = actual->sig;

/* crea */
nuevo = (struct listaDE *) malloc(sizeof(struct listaDE));
nuevo->clave = elem;

/* enlaza */
actual->ant->sig = nuevo;
nuevo->ant = actual->ant;
nuevo->sig = actual;
actual->ant = nuevo;
}

- Procedimiento de borrado:
void borrarDE(struct listaDE *LDE, int elem)
{
struct listaDE *actual;

/* busca */
actual = LDE->sig;
LDE->clave = elem;

while (actual->clave < elem)
actual = actual->sig;

/* borra */
if (actual != LDE && actual->clave == elem) {
actual->sig->ant = actual->ant;
actual->ant->sig = actual->sig;
free(actual);
}
}

si puedes mandarmelo hoy te lo agradezco, O SINO PUEDES HOY MAÑANA ME LO MANDAS
¡¡¡¡¡¡¡¡GRACIAS

javi
26 de Julio del 2004
Buenas ,es dificil meterse en ese codigo y no cambiar muchas cosas :( ,he intentado cambiar lo menos posibles y añadir la opcion borrar un registro dado . No se si funcionara bien ya que no he mirado como funciona exactamente tu programa pero se hara algo parecido:
Basicamente para borrar lo que uso es una estructura donde copio todos los registros menos el que se desea borrar y luego la asigno a la principal.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



struct _agenda {
char nombre[30];
char telefono[20];
struct _agenda *siguiente;
};

struct _agenda *primero, *ultimo;
int iRegistros;

void mostrar_menu() {
printf("nnMenú:n=====nn");
printf("1.- Añadir elementosn");
printf("2.- Borrar elementosn");
printf("3.- Mostrar listan");
printf("4.- Salirnn");
printf("Escoge una opcion: ");fflush(stdin);
}

/* Con esta función añadimos un elemento al final de la lista */
void anadir_elemento() {
struct _agenda *nuevo;

/* reservamos memoria para el nuevo elemento */
nuevo = (struct _agenda *) malloc (sizeof(struct _agenda));
if (nuevo==NULL) printf( "No hay memoria disponible!n");

printf("nNuevo elemento:n");
printf("Nombre: "); fflush(stdin);
gets(nuevo->nombre);
printf("Teléfono: "); fflush(stdin);
gets(nuevo->telefono);

/* el campo siguiente va a ser NULL por ser el último elemento
de la lista */
nuevo->siguiente = NULL;

/* ahora metemos el nuevo elemento en la lista. lo situamos
al final de la lista */
/* comprobamos si la lista está vacía. si primero==NULL es que no
hay ningún elemento en la lista. también vale ultimo==NULL */
if (primero==NULL) {
printf( "Primer elementon");
primero = nuevo;
ultimo = nuevo;
}
else {
/* el que hasta ahora era el último tiene que apuntar al nuevo */
ultimo->siguiente = nuevo;
/* hacemos que el nuevo sea ahora el último */
ultimo = nuevo;
}
}

void mostrar_lista() {
struct _agenda *auxiliar; /* lo usamos para recorrer la lista */
int i;

i=0;
auxiliar = primero;
printf("nMostrando la lista completa:n");
while (auxiliar!=NULL) {
printf( "%d§.- Nombre: %s, Telefono: %sn",i+1,
auxiliar->nombre,auxiliar->telefono);
auxiliar = auxiliar->siguiente;
i++;
}
if (i==0) printf( "nLa lista está vacía!!n" );
}

void borrar_elemento(int elemento)
{
int i=0;
struct _agenda *copia,*auxiliar;
copia=(struct _agenda *) malloc (sizeof(struct _agenda)*30);

auxiliar=copia;
while (primero!=NULL)
{
i++;
if((elemento==i)&&(iRegistros>1))
{
primero=primero->siguiente;
continue;
}
if(iRegistros==1)
auxiliar = (struct _agenda *) NULL;
strcpy(copia->nombre,primero->nombre);
strcpy(copia->telefono,primero->telefono);
copia=copia->siguiente;
primero=primero->siguiente;
}

primero=auxiliar;
copia = (struct _agenda *) NULL;
ultimo=copia;
}

void main() {
char opcion;
int elemento;

primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do {
mostrar_menu();
opcion = getchar();
switch ( opcion ) {
case '1': anadir_elemento();
iRegistros++;
break;
case '2':
printf("n Introduce numero de elemento a borrar(1-%d): ",iRegistros);
scanf("%d",&elemento);
borrar_elemento(elemento);
iRegistros--;
break;
case '3': mostrar_lista();
break;
case '4': exit( 1 );
default: printf( "Opción no válidan" );
break;
}
} while (opcion!='4');
}