Dev - C++ - Lista de ligas dobles inversa

 
Vista:
sin imagen de perfil

Lista de ligas dobles inversa

Publicado por PAOLA (1 intervención) el 19/03/2016 21:50:30
Hola a todos tengo el siguiente problema tengo el codigo siguiente pero tengo que hacer ciertos cambios,
1. Crear la función imprime_inverso, la cual imprimirá los valores desde el último elemento insertado en la lista hasta el primero.

2. Crear la función busca_inverso, la cual buscará un valor introducido por el usuario pero lo hará empezando a buscar desde el último elemento insertado en la lista hasta el primero.

3. Crear la función elimina_inverso, la cual eliminará el valor introducido por el usuario pero lo hará empezando a buscarlo desde el último elemento insertado en la lista hasta el primero.

la verdad quede un poco confundida pueden ayudarme, muchas gracias a todos


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
using namespace std;
typedef struct nodo
{
int dato;
nodo *sig;
nodo *ant;
};
nodo *fin=NULL, *inicio=NULL;
nodo* crea_nodo(int);
void inserta(int);
void muestra_lista();
void crea_lista();
void busca(int);
void elimina(int);
int main(int argc, char *argv[])
{
int opcion, num;
char repetir='s';
do{
cout<<"Introduce una opcion: \n\n1.Crea una lista \n2.Insertar un dato en la lista \n3.Muestra toda la lista \n4.Busca \n5.Elimina un valor de la lista \n6. Salir \n";
cin>>opcion;
switch(opcion){
case 1: crea_lista();
cout<<"Lista creada"<<endl;;
break;
case 2: cout<<"Que numero deseas insertar: ";
cin>>num;
inserta (num);
break;
case 3: muestra_lista();
break;
case 4: cout<<"Que numero deseas buscar: ";
cin>>num;
busca(num);
break;
case 5: cout<<"Que numero deseas eliminar: ";
cin>>num;
elimina(num);
break;
case 6: repetir='n';
break;
default: cout<<"Opcion incorrecta"<<endl;
}
}while(repetir == 's' || repetir == 'S');
return EXIT_SUCCESS;
}
void crea_lista()
{
inicio = crea_nodo(0);
fin = inicio;
}
nodo* crea_nodo(int valor)
{
nodo* nuevo_nodo = (nodo*)malloc(sizeof(nodo));
if (nuevo_nodo != NULL)
{
nuevo_nodo->dato = valor;
nuevo_nodo->sig = NULL;
nuevo_nodo->ant = NULL;
}
return nuevo_nodo;
}
void inserta(int valor)
{
if(inicio==NULL)
crea_lista();
nodo* nuevoNodo = crea_nodo(valor);
fin->sig = nuevoNodo;
nuevoNodo->ant=fin;
fin =fin->sig;
}
void muestra_lista()
{
if(inicio==NULL)
crea_lista();
nodo *aux=inicio->sig;
if(aux==NULL)
cout<<"Lista vacia"<<endl;
else{
cout<<"INICIO -> ";
while(aux != NULL){
cout<<aux->dato<<" -> ";
aux = aux->sig;
}
cout<<"NULL"<<endl<<endl;
}
}
void busca(int b)
{
int valor=0;
if(inicio==NULL)
crea_lista();
nodo *aux=inicio->sig;
while(aux != NULL){
if(b == aux->dato){
valor++;
}
aux = aux->sig;
}
if(valor==0)
cout<<"NO existe el elemento "<<b<<" en la lista"<<endl;
else{
if(valor == 1)
cout<<"El elemento "<<b<<" si existe y se repite "<<valor<<" vez en la lista"<<endl;
else
cout<<"El elemento "<<b<<" si existe y se repite "<<valor<<" veces en la lista"<<endl;
}
}
void elimina(int e)
{
int valor=0, pos=0;
if(inicio==NULL)
crea_lista();
nodo *aux=inicio->sig, *aux2 = inicio;
while(aux != NULL){
pos++;
if(e == aux->dato){
aux2 -> sig = aux ->sig;
free(aux);
cout<<"Se ha eliminado el elemento "<<e<<" en la posicion ("<<pos<<") en la lista"<<endl;
aux = aux2->sig;
aux -> ant = aux2;
valor=1;
}
else{
aux = aux->sig;
aux2 = aux2->sig;
}
}
if(valor==0)
cout<<"NO existe el elemento "<<e<<" en la lista"<<endl;
}
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