necesito ayuda para hacer un programa en c++ para simular un sorteo donde se dispone de:
una lista de n nombres que participan en el sorteo.
una cola de m premios (m<=n)
una lista de premiados (pareja de premio-premiado)
estoy intentando el primer punto pero no se como agregar nombres en una lista, ya que solo he visto lista con enteros y no caracteres, aparte debo modificar el codigo visto en clase para poder realizarlo.
Agradezco la guia o ayuda q me puedan dar en este foro.
Código
#include <iostream> using namespace std; class nodo {// guarda la informacion que vamos a manejar en la lista, valor de informacion int entero public: nodo(int v, nodo *sig = NULL)//constructor que tiene dos parametros, puede se un valor y no null tambien { valor = v; siguiente = sig; } private: int valor;//nodo de tipo entero nodo *siguiente;//puede apuntar a cualquier instancia de la clase nodo,puntero hacia una instancia friend class lista;//nodo le da permiso a lista para trabajar con la class private }; typedef nodo *pnodo;//tipo de dato llamado pnodo(nombre del dato) que apunta hacia una instancia de tipo nodo y * es el puntero class lista {//tiene varios metodos, permite crear nodos y manejarlos public: lista() { primero = actual = NULL; }//cuando se crea la lista primero y actual quedan null ~lista();// destructor de la clase ~(alt 126), se llama igual que la clase, no retorna a nada ni recibe parametros y sirve para limpiar la lista, vaciar el espacio en memoria void Insertar(int v);//inserta un valor en la lista y debe ser entero void Borrar(int v);//se debe indicar el elemento a borrar, entoces se llama al elemento a borrar bool ListaVacia() { return primero == NULL; }//si la lista da null es porque esta vacia void Mostrar();//lo que hace es recorrer la lista y la muestra void Siguiente();//pasa al siguiente elemento void Primero(); void Ultimo(); bool Actual() { return actual != NULL; } int ValorActual() { return actual->valor; } private: pnodo primero;// es un puntero a alguna instacia de nodo pnodo actual;//es un puntero hacia un nodo }; lista::~lista() { pnodo aux; while(primero) { aux = primero; primero = primero->siguiente; delete aux;// } actual = NULL; } void lista::Insertar(int v) { pnodo anterior; // Si la lista está vacía if(ListaVacia() || primero->valor > v) { // Asignamos a lista un nuevo nodo de valor v y // cuyo siguiente elemento es la lista actual primero = new nodo(v, primero);//se crea un nuevo nodo } else { // Buscar el nodo de valor menor a v anterior = primero;//anterior apunte hacia donde esta apuntando primero (el puntero lo que va va hacer es guardar una direccion de memoria) // 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; // Creamos un nuevo nodo después del nodo anterior, y cuyo siguiente // es el siguiente del anterior anterior->siguiente = new nodo(v, anterior->siguiente);//anterior siguiente va a apuntar hacia un nuevo nodo osea la ubicacion de memoria donde lo vamos a crear } //anterior siguiente vale null } void lista::Borrar(int v) { pnodo anterior, nodo; nodo = primero; 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 primero = nodo->siguiente; else // un elemento cualquiera anterior->siguiente = nodo->siguiente; delete nodo; } } void lista::Mostrar() { nodo *aux; aux = primero; while(aux) { cout << aux->valor << "-> "; aux = aux->siguiente; } cout << endl; } void lista::Siguiente() { if(actual) actual = actual->siguiente; } void lista::Primero() { actual = primero; } void lista::Ultimo() { actual = primero; if(!ListaVacia()) while(actual->siguiente) Siguiente(); }