elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Lista Simplemente enlazada ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Lista Simplemente enlazada ayuda  (Leído 2,025 veces)
Cpp

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Lista Simplemente enlazada ayuda
« en: 11 Diciembre 2014, 03:26 am »

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");
    }
}



En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Lista Simplemente enlazada ayuda
« Respuesta #1 en: 11 Diciembre 2014, 07:29 am »

Si quieres que una lista simplemente enlazada se convierta en circular basta con que "cierres" la lista, es decir, haz que el puntero del último elemento de la lista apunte al primero y listo.

Un saludo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines