Ayuda. Listas enlazadas simples
Tengo que hacer un programa conlistas simples tengo que hacer consultas, altas, bajas y modificaciones el problema es como hacer bajas y modificaciones, aqui esta elcodigo:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void menu(void);
void altas(void);
void mostrar_lista(void);
//Estructura
struct est_remdest{
//Datos del remitente
char nomrem[50];
char direccionrem[70];
char coloniarem[15];
char ciudadrem[15];
char cprem[7];
int noguiarem;
char tipoartrem[15];
//Datos del destino
char nomdest[50];
char direcciondest[70];
char coloniadest[15];
char ciudaddest[15];
char cpdest[7];
char teldest[20];
struct est_remdest *siguiente;
};
struct est_remdest *primero, *ultimo;
void main(void)
{
char opcion;
primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do {
clrscr();
menu();
opcion = getch();
switch ( opcion ) {
case '1': altas();
break;
case '2': printf("No disponible todavia!n");
getch();
break;
case '3': mostrar_lista();
break;
case '4': printf("No disponible todavian");
getch();
break;
case '5': exit(1);
default: printf( "Opcion no validan" );
getch();
break;
}
} while (opcion!='4');
}
void menu(void)
{
printf("nnMenu:n=====nn");
printf("1.- Altasn");
printf("2.- Bajasn");
printf("3.- Consultan");
printf("4.- Modificacionesn");
printf("5.- Salirnn");
printf("Escoge una opci¢n: ");fflush(stdout);
}
/* Con esta funcion a¤adimos un elemento al final de la lista */
void altas(void)
{
struct est_remdest *nuevo;
/* reservamos memoria para el nuevo elemento */
nuevo = (struct est_remdest *) malloc (sizeof(struct est_remdest));
if (nuevo==NULL) printf( "No hay memoria disponible!n");
//Datos del remitente
printf("nNuevo elemento:n");
printf("Nombre del remitente: "); fflush(stdout);
gets(nuevo->nomrem);
printf("Direccion del remitente: "); fflush(stdout);
gets(nuevo->direccionrem);
printf("Colonia del remitente:"); fflush(stdout);
gets(nuevo->coloniarem);
printf("Ciudad del remitente:"); fflush(stdout);
gets(nuevo->ciudadrem);
printf("Codigo postal del remitente:n"); fflush(stdout);
gets(nuevo->cprem);
printf("No. de guia:n"); fflush(stdout);
cin>>nuevo->noguiarem;
printf("Tipo de articulo:"); fflush(stdout);
gets(nuevo->tipoartrem);
//Datos del destino
printf("Nombre del destinatario: "); fflush(stdout);
gets(nuevo->nomdest);
printf("Direccion del destinatario: "); fflush(stdout);
gets(nuevo->direcciondest);
printf("Colonia del destinatario: "); fflush(stdout);
gets(nuevo->coloniadest);
printf("Ciudad del destinatario: "); fflush(stdout);
gets(nuevo->ciudaddest);
printf("Codigo Postal del destinatario:n"); fflush(stdout);
gets(nuevo->cpdest);
printf("nTelefono del destinatario: "); fflush(stdout);
gets(nuevo->teldest);
/* el campo siguiente va a ser NULL por ser el ultimo 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 esta vacia. si primero==NULL es que no
hay ningun elemento en la lista. tambi‚n vale ultimo==NULL */
if (primero==NULL) {
printf( "Primer elementon");
getch();
primero = nuevo;
ultimo = nuevo;
}
else {
/* el que hasta ahora era el ultimo tiene que apuntar al nuevo */
ultimo->siguiente = nuevo;
/* hacemos que el nuevo sea ahora el ultimo */
ultimo = nuevo;
}
}
void mostrar_lista(void)
{
struct est_remdest *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);
//getch();
printf("Nodo numero %dnn", i+1);
printf("Nombre del remitente: %sn", auxiliar->nomrem);
printf("Direccion del remitente: %sn", auxiliar->direccionrem);
printf("Colonia del remitente: %sn", auxiliar->coloniarem);
printf("Ciudad del remitente: %sn", auxiliar->ciudadrem);
printf("Codigo postal del remitente: %sn", auxiliar->cprem);
printf("No. de guia del remitente: %dn", auxiliar->noguiarem);
printf("Tipo de articulo: %sn", auxiliar->tipoartrem);
printf("Nombre del destinatario: %sn", auxiliar->nomdest);
printf("Direccion del destinatario: %sn", auxiliar->direcciondest);
printf("Colonia del destinatario: %sn", auxiliar->coloniadest);
printf("Ciudad del destinatario: %sn", auxiliar->ciudaddest);
printf("Codigo postal del destintario: %sn", auxiliar->cpdest);
printf("Telefono del destinatario: %sn", auxiliar->teldest);
auxiliar = auxiliar->siguiente;
i++;
getch();
clrscr();
}
if (i==0) printf( "nLa lista esta vacia!!n" );
getch();
}
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void menu(void);
void altas(void);
void mostrar_lista(void);
//Estructura
struct est_remdest{
//Datos del remitente
char nomrem[50];
char direccionrem[70];
char coloniarem[15];
char ciudadrem[15];
char cprem[7];
int noguiarem;
char tipoartrem[15];
//Datos del destino
char nomdest[50];
char direcciondest[70];
char coloniadest[15];
char ciudaddest[15];
char cpdest[7];
char teldest[20];
struct est_remdest *siguiente;
};
struct est_remdest *primero, *ultimo;
void main(void)
{
char opcion;
primero = (struct _agenda *) NULL;
ultimo = (struct _agenda *) NULL;
do {
clrscr();
menu();
opcion = getch();
switch ( opcion ) {
case '1': altas();
break;
case '2': printf("No disponible todavia!n");
getch();
break;
case '3': mostrar_lista();
break;
case '4': printf("No disponible todavian");
getch();
break;
case '5': exit(1);
default: printf( "Opcion no validan" );
getch();
break;
}
} while (opcion!='4');
}
void menu(void)
{
printf("nnMenu:n=====nn");
printf("1.- Altasn");
printf("2.- Bajasn");
printf("3.- Consultan");
printf("4.- Modificacionesn");
printf("5.- Salirnn");
printf("Escoge una opci¢n: ");fflush(stdout);
}
/* Con esta funcion a¤adimos un elemento al final de la lista */
void altas(void)
{
struct est_remdest *nuevo;
/* reservamos memoria para el nuevo elemento */
nuevo = (struct est_remdest *) malloc (sizeof(struct est_remdest));
if (nuevo==NULL) printf( "No hay memoria disponible!n");
//Datos del remitente
printf("nNuevo elemento:n");
printf("Nombre del remitente: "); fflush(stdout);
gets(nuevo->nomrem);
printf("Direccion del remitente: "); fflush(stdout);
gets(nuevo->direccionrem);
printf("Colonia del remitente:"); fflush(stdout);
gets(nuevo->coloniarem);
printf("Ciudad del remitente:"); fflush(stdout);
gets(nuevo->ciudadrem);
printf("Codigo postal del remitente:n"); fflush(stdout);
gets(nuevo->cprem);
printf("No. de guia:n"); fflush(stdout);
cin>>nuevo->noguiarem;
printf("Tipo de articulo:"); fflush(stdout);
gets(nuevo->tipoartrem);
//Datos del destino
printf("Nombre del destinatario: "); fflush(stdout);
gets(nuevo->nomdest);
printf("Direccion del destinatario: "); fflush(stdout);
gets(nuevo->direcciondest);
printf("Colonia del destinatario: "); fflush(stdout);
gets(nuevo->coloniadest);
printf("Ciudad del destinatario: "); fflush(stdout);
gets(nuevo->ciudaddest);
printf("Codigo Postal del destinatario:n"); fflush(stdout);
gets(nuevo->cpdest);
printf("nTelefono del destinatario: "); fflush(stdout);
gets(nuevo->teldest);
/* el campo siguiente va a ser NULL por ser el ultimo 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 esta vacia. si primero==NULL es que no
hay ningun elemento en la lista. tambi‚n vale ultimo==NULL */
if (primero==NULL) {
printf( "Primer elementon");
getch();
primero = nuevo;
ultimo = nuevo;
}
else {
/* el que hasta ahora era el ultimo tiene que apuntar al nuevo */
ultimo->siguiente = nuevo;
/* hacemos que el nuevo sea ahora el ultimo */
ultimo = nuevo;
}
}
void mostrar_lista(void)
{
struct est_remdest *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);
//getch();
printf("Nodo numero %dnn", i+1);
printf("Nombre del remitente: %sn", auxiliar->nomrem);
printf("Direccion del remitente: %sn", auxiliar->direccionrem);
printf("Colonia del remitente: %sn", auxiliar->coloniarem);
printf("Ciudad del remitente: %sn", auxiliar->ciudadrem);
printf("Codigo postal del remitente: %sn", auxiliar->cprem);
printf("No. de guia del remitente: %dn", auxiliar->noguiarem);
printf("Tipo de articulo: %sn", auxiliar->tipoartrem);
printf("Nombre del destinatario: %sn", auxiliar->nomdest);
printf("Direccion del destinatario: %sn", auxiliar->direcciondest);
printf("Colonia del destinatario: %sn", auxiliar->coloniadest);
printf("Ciudad del destinatario: %sn", auxiliar->ciudaddest);
printf("Codigo postal del destintario: %sn", auxiliar->cpdest);
printf("Telefono del destinatario: %sn", auxiliar->teldest);
auxiliar = auxiliar->siguiente;
i++;
getch();
clrscr();
}
if (i==0) printf( "nLa lista esta vacia!!n" );
getch();
}
