Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Cpp

#1
Buenas noches tengo entendido que una lista simplemente enlazada y lista circular simple son casi parecidas, aca les dejo un TDA de una lista simplemente enlazada y quisiera que me den las modificaciones para que sea una lista circular simple muchas gracias

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

// Lista simplemente enlazada
struct tnodo{
   int dato;
   struct tnodo *siguiente;
};

// PROCEDIMIENTOS
// Creación de la Lista Simple
void crearLista(tnodo **lista)
{
   (*lista)=NULL;
}

bool listaVacia (tnodo *lista)
{
   if(lista == NULL)
   {
      return true;
   }
   else
   {
      return false;
   }   
}

bool listaLlena (tnodo *nodo)
{
   if(nodo == NULL)
   {
      return true;
   }
   else
   {
      return false;
   }
}

tnodo* crearNodo (int dato) //crea un nodo insertandole el dato recibido
{
   tnodo *nodo=(tnodo*)malloc(sizeof(tnodo));

   if (listaLlena(nodo)==false)
   {
      nodo->dato=dato;
      nodo->siguiente=NULL;
   }
   return (nodo);
}

// Agrega al final de la lista
void agregarFinal (tnodo **lista, int dato)
{
   struct tnodo *nodo,*aux;
    nodo = crearNodo(dato);
   if (*lista ==NULL)
   {
        *lista=nodo;
    }
    else
    {
        aux=*lista;
        while (aux->siguiente != NULL)
        {
            aux = (aux)->siguiente;         
        }
        aux->siguiente = nodo;   
    }
}

// Elimina un nodo al ultimo de la lista
void eliminarFin (tnodo **lista, int *sacado)
{
   tnodo *listaAux = *lista;
   tnodo *listaAux2 = *lista;
    if (listaVacia(*lista)==false)
   {
        while(listaAux->siguiente!=NULL)
        {
            listaAux2=listaAux2->siguiente;
            if(listaAux2->siguiente!=NULL)
            {
                listaAux= listaAux2;
            }
            else
            {
               
                listaAux=listaAux->siguiente;
                *sacado = (listaAux)->dato;
            }             
        }
        *lista=listaAux;   
    }
    else
    {
        *sacado=(*lista)->dato;
        *lista = NULL;
    }
}

// Devolver el dato del primer nodo
int verInicio(tnodo *lista)
{
   if (listaVacia(lista)==false)
   {
      //tnodo *nodo = lista;
      //return nodo->dato;
      return (lista)->dato;
   }else
    {
        printf("Lista Vacia \n");
    }   
}

// Devolver el dato del ultimo nodo
int verFinal(tnodo *lista)
{
   int dato;
    if(listaVacia(lista)==false)
   {
        while (lista->siguiente != NULL)
        {
            lista=(lista)->siguiente;         
        }
        return (lista)->dato;
    }else
    {
        printf("Lista Vacia \n");
    }   
}

// Muestra todos los elementos de la Lista */
void mostrarElementos(tnodo *lista){
    if(listaVacia (lista)==false)
   {
        while (lista!=NULL){
            printf("\n %d",lista->dato);
            lista=(lista)->siguiente;
        }
    }else
    {
        printf("Lista Vacia \n");
    }
}

#2
Programación C/C++ / Lista circular simple (LCS)
11 Diciembre 2014, 01:40 AM
Buenas noches queria saber si me pueden ayudar con este problema:

Mediante LCS implemente una PILA de caracteres con sus operaciones basicas:
a)Crear una pila
b)Agregar un elemento a la pila
c)Sacar un elemento de la pila
d)Ver el elemento del tope de la pila(sin eliminarlo)

Se que es medio complicado pero aun quesea algún ejemplo como para modificarlo desde ya muchas gracias