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