Foros del Web » Programación para mayores de 30 ;) » Programación General »

Listas Enlazadas en C++

Estas en el tema de Listas Enlazadas en C++ en el foro de Programación General en Foros del Web. Buenas Tardes, escribo porque tengo un gran problemo que tengo que solucionar antes del martes. Estoy estudiando ingeniería informatica y me han colocado a hacer ...
  #1 (permalink)  
Antiguo 02/10/2004, 14:08
 
Fecha de Ingreso: abril-2002
Mensajes: 6
Antigüedad: 22 años
Puntos: 0
Información Listas Enlazadas en C++

Buenas Tardes, escribo porque tengo un gran problemo que tengo que solucionar antes del martes. Estoy estudiando ingeniería informatica y me han colocado a hacer un trabajo con listas enlazadas en c++, el problema es que tengo las bases de listas, nodos y esas cosas, pero no se absolutamente nada a la hora de implementar esta teoría en C++, he leido varios manuales pero realmente me es muy dificil entender el funcionamiento de ellos.

Resulta que tengo que hacer los siguiente algoritmos en C++:

1. Dada una lista enlazada creada por el usuario, cuya estructura de noso contiene los campos INFO y ENLACE, diseñar un algoritmo que cuente el numero de nodos de la lista, el promedio de los valores de los nodos, el numero de valores de nodos pares e impares.

2. Diseñar un algoritmo para cambiar el campo INFO del nodo n_esimo de una lista enlazada por un valor dado X.

Espero me puedan ayudar y que no sea de mucha molestia, pero de este trabajo depende la nota de un parcial para la materia. Muchas gracias.

Jair Arley Bedoya
  #2 (permalink)  
Antiguo 03/10/2004, 09:07
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
OKOK. No estamos aqui para resolver tareas, pero como vemos que ya tienes buenos avances te ayudaremos.

Mira, si quieres contar los nodos, lo mas simple seria que en tu estructura-nodo, agregaras un contador, y que al agregar un nodo a tu lista incrementaras ese contador en el nuvo elemento. Esto te daria el numero de cada nodo. Tengo yo varios algoritmos de listas enlazadas en C. No se si lo estes haciendo con clases o con estructuras.
Pero para encontrar un dato, simplemente tienes que checar en el primer nodo, y si no esta ahi, pues apuntar al siguiente y asi sucesivamente hasta que lo encuentre. Para esto se usa un ciclo for o while, el que quieras.

Saludos
  #3 (permalink)  
Antiguo 03/10/2004, 12:55
 
Fecha de Ingreso: abril-2002
Mensajes: 6
Antigüedad: 22 años
Puntos: 0
Instru, muchas gracias, sé que no están aqui para resolver tareas ni mucho menos, lo que sucede es que es mi primer acercamiento a las listas enlazadas y al C++, es algo muy dificil ya que tengo que aprender C y las listas a como dé lugar, por mí mismo, eso no es problema, el problema es que tengo que aprenderlo antes de este martes (Tengo un profe bastante tirano), ayer estuve intentando resolver el problema pero no he podido solucionarlo, me gustaría mandarte el código para que lo veas y me ayudes a corregirlo, el problema es que cada vez que le ingreso el valor a un nodo me imprime el numero 12, algo muy raro.

Este es el código del primer algoritmo:

#include <stdio.h>
#include <alloc.h>
#include <conio.h>

struct nodo {
int val;
struct nodo *siquiente;
};

struct nodo *primero, *ultimo;

void anadir_elemento() {
struct nodo *nuevo;
nuevo = (struct nodo *) malloc (sizeof(struct nodo));
if (nuevo == NULL)
printf("No hay memoria Disponible!\n");

printf("\n Nuevo elemento \n");
printf("Ingrese un valor: ");
scanf("%d", nuevo->val);
nuevo->siquiente = NULL;

if(primero == NULL){
printf("Primer elemento\n");
primero = nuevo;
ultimo = nuevo;
}
else {
ultimo->siquiente = nuevo;
ultimo = nuevo;
}
}

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

i=0;
auxiliar = primero;
printf("\nMostrando la lista completa:\n");
while (auxiliar!=NULL) {
printf("%d ", auxiliar->val);
auxiliar = auxiliar->siquiente;
i++;
}
if (i==0) printf( "\nLa lista está vacía!!\n" );
}


void mostrar_menu() {
printf("\n\nMenú:\n=====\n\n");
printf("1.- Añadir elementos\n");
printf("2.- Mostrar la lista\n");
printf("3.- Salir\n\n");
printf("Escoge una opción: ");
fflush(stdout);
}


int main() {
char opcion;

primero = (struct nodo *) NULL;
ultimo = (struct nodo *) NULL;
do {
mostrar_menu();
opcion = getch();
switch ( opcion ) {
case '1': anadir_elemento();
break;
case '2': mostrar_lista();
break;
case '3': printf("Salida del programa principal\n");
default: printf( "Opción no válida\n" );
break;
}
} while (opcion!='3');
}
  #4 (permalink)  
Antiguo 05/10/2004, 15:10
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Huy, hubieras documentado varias lineas para dar mas entendimiento. Me da mucha flojera tener que interpretarlo mentalmente todo.
Pero te doy un consejo....
www.abcdatos.com tiene excelenter tutoriales y apuntes sobre programacion, y visto muchos tutoriales sobre listas enlazadas.
Intenta buscar.

Saludos



Edited: Otra buena idea es intentar ejecutar instrucciones paso a paso, para ver que pasa con cada sentencia.

Saludos

Última edición por Instru; 05/10/2004 a las 15:14
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 14:54.