Dev - C++ - como lo implemento para que sea una lista doblemente enlazada circular

 
Vista:

como lo implemento para que sea una lista doblemente enlazada circular

Publicado por edwin (1 intervención) el 18/10/2021 22:16:41
#include <iostream>
using namespace std;

class Nodo{
public:
Nodo * sig;
Nodo * ant;
Nodo(){
sig=NULL;
ant=NULL;
}
Nodo (int dato_){
dato=dato_;
sig=NULL;
ant=NULL;
}
int get_dato(){
return dato;
}
void set_dato(int dato_){
dato = dato_ ;
}
private:
int dato;
};

class ListaD{
public:
ListaD(){
cabeza=NULL;
cola=NULL;
}
void insert (int dato_){//Funcion insertar en cola
cabeza = new Nodo(dato_);
cola=cabeza;
cabeza->sig = cola;
cola->ant = cabeza;
cabeza->ant = NULL;
cola->sig = NULL;
}

void insertAsd(int dato_){//Funcion insetar ascendente
if(!cabeza){
insert(dato_);
}
else{
Nodo * temp = cabeza;
Nodo * anterior = NULL;
while(temp && temp->get_dato()<dato_){
anterior=temp;
temp=temp->sig;
}
Nodo * nuevo = new Nodo(dato_);
if(temp==cabeza){
nuevo->sig=temp;
temp->ant=nuevo;
cabeza=nuevo;
}
else{
anterior->sig = nuevo;
nuevo->sig=temp;
nuevo->ant=anterior;

}
}
}
void insertDes(int dato_){//funcion insertar descendente
if(!cabeza){
insert(dato_);
}
else{
Nodo * temp = cabeza;
Nodo * anterior = NULL;
while(temp && temp->get_dato()>dato_){
anterior=temp;
temp=temp->sig;
}
Nodo * nuevo = new Nodo(dato_);
if(temp==cabeza){
nuevo->sig=temp;
temp->ant=nuevo;
cabeza=nuevo;
}
else{
anterior->sig = nuevo;
nuevo->sig=temp;
nuevo->ant=anterior;

}
}
}
Nodo * search (int dato_){//Funcion Buscar
if(!cabeza){
return NULL;
}
else{
Nodo * nodo_t=cabeza;
while(nodo_t){
if(nodo_t->get_dato()==dato_){
return nodo_t;
}
nodo_t = nodo_t->sig;
}
return NULL;
}
}
bool update(int ante_dat, int new_dat){//Funcion modificar
Nodo * busqueda = search(ante_dat);
if(busqueda){
busqueda->set_dato(new_dat);
return true;
}
else{
return false;
}

}
bool del(int dato_){//funcion eliminar
if(!cabeza){
return false;
}
else{
if(cabeza->get_dato() == dato_){
Nodo * nodocancel=cabeza;
cabeza=cabeza->sig;
delete nodocancel;
return true;
}
else{
Nodo * nodo_t=cabeza;
while(nodo_t->sig){
if(nodo_t->sig->get_dato() == dato_){
Nodo * nodocancel = nodo_t->sig;
nodo_t->sig=nodo_t->sig->sig;
delete nodocancel;
return true;
}
nodo_t = nodo_t->sig;
}
return false;
}
}
}
friend ostream& operator <<(ostream & os, ListaD & lista){//Funcion mostrar

Nodo *nodo_t = lista.cabeza;
while (nodo_t){
os << nodo_t -> get_dato() <<" , ";
nodo_t = nodo_t -> sig;
}
os<<endl;
return os;
}


private:
Nodo * cabeza;
Nodo * cola;
};

int main(int argc, char *argv[]) {
ListaD miLista;
miLista.insertAsd (10);
miLista.insertAsd (14);
miLista.insertAsd (5);

cout<<miLista<<endl;

miLista.insertDes (1);
miLista.insertDes (22);
miLista.insertDes (30);

cout<<miLista<<endl;

miLista.update (1, 3);
miLista.update (2, 4);

cout<<miLista<<endl;

miLista.del (14);
miLista.del (15);
cout<<miLista<<endl;
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder