Dev - C++ - lista LSE los numeros queden insertados de atrás hacia adelante

 
Vista:
Imágen de perfil de Gaston
Val: 114
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

lista LSE los numeros queden insertados de atrás hacia adelante

Publicado por Gaston (40 intervenciones) el 17/10/2020 08:12:32
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
134
135
136
137
138
139
140
141
142
/**********************************************************************************************************
1-Codificar un procedimiento que lea nros.hasta que aparezca un 0 y cargar una
lista simplemente encadenada  con dichos nros. donde los mismos queden insertados
de atrás hacia adelante. Es decir, si se leen 1, 2, 3, 4, 0 se generará la LSE
4, 3, 2, 1.  Su declaración será void cargareves (struct lista *&com)
*********************************************************************************************************/
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
//---------------------------------------------------
 
struct lista
{
  int num;
  struct lista *sig;
  struct lista *nuevo;
 
 
};
 
void leer_numero(char cade[30], int &a)
{
 
  printf("\n %s:",cade);
  scanf("%d",&a);
  fflush(stdin);
 
}
 
void armar_lista(struct lista *&com)
{
   //declaro un puntero a struct lista
   struct lista *p;
   struct lista *ant;
   struct lista *sig;
 
   int n;
 
   printf("\n ingrese el primer numero de la lista: ");
   scanf("%d",&n);
   fflush(stdin);
 
   //si n==0 com apunta a NULL. Ojo !! com debe estar apuntado a NULL
   if(n==0)
     com=NULL;
   else
   {
     //creo un nodo para com: "pido un nodo para com por unica vez, esto se hace aparte fuera del ciclo para no perderlo"
     com= new struct lista;
     com->num=n;      //com apunta num que es n: es un valor numerico que yo ingreso.
     com->sig=NULL;  //com apunta sig que es NULL !!!
     ant=com;       //ahora com apunta a ant
 
     printf("\n ingrese otro numero de la lista: (0) para terminar ");
     scanf("%d",&n);
     fflush(stdin);
 
     while(n!=0)
     {
 
        p=new struct lista;   //creo el nodo apuntado por p: "pido un nodo para p"
        p->num=n;             //p apunta num que es n: es un valor numerico que yo ingreso.
        p->sig=NULL;      //p apunta sig que es NULL !!!!
        ant->sig=p;        //ant apunta a sig que es p (aca hago el enlace)
        ant=p;              //ahora p apunta a ant
 
        printf("\n ingrese otro numero de la lista: (0) para terminar ");
        scanf("%d",&n);
        fflush(stdin);
     }
 
   }
 
}
 
void mostrar_lista(struct lista *com)
{
  struct lista *p;
  p=com;
 
  while(p!=NULL)
  {
    printf("\n%d",p->num);
    p=p->sig;
  }
 
}
 
 
 
void cargareves(struct lista *&com, int n)
{
     struct lista *nuevo; //declaro la variable nuevo de tipo struct lista
 
     nuevo = new struct lista;    //pido un nuevo nodo
     nuevo ->num =n;             // nuevo apunta num y le asigno n
     nuevo ->sig =com;        // nuevo apunta a siguiente = com
     com = nuevo;              //com y nuevo apuntan a la misma direccion de memoria
 
}
 
void pausar()
{
   printf("\n");
   system("pause");
 
}
 
//-------------------------------------------------------------------------------------
 
int main()
{
    struct lista *comienzo;
 
    int num;
 
  //comienzo = new struct lista;
 
 
    printf("________________________________________________________ \n");
    printf("\n");
 
    armar_lista(comienzo);
    mostrar_lista(comienzo);
 
    printf("\n");
    printf("________________________________________________________ \n");
    printf("\n");
 
 
 
    pausar();
    printf("\n");
    printf("---------------------- Terminar ------------------");
 
    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

lista LSE los numeros queden insertados de atrás hacia adelante

Publicado por Nacho (181 intervenciones) el 17/10/2020 16:42:21
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
134
135
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
//---------------------------------------------------
 
struct lista
{
    int num;
    struct lista* sig;
    //struct lista* nuevo;
};
 
void leer_numero(char cade[30], int& a)
{
 
    printf("\n %s:", cade);
    scanf("%d", &a);
    fflush(stdin);
 
}
 
void armar_lista(struct lista*& com)
{
    //declaro un puntero a struct lista
    struct lista* p;
    struct lista* ant;
  //  struct lista* sig;
 
    int n;
 
    printf("\n ingrese el primer numero de la lista: ");
    scanf("%d", &n);
    fflush(stdin);
 
    //si n==0 com apunta a NULL. Ojo !! com debe estar apuntado a NULL
    if (n == 0)
        com = NULL;
    else
    {
        //creo un nodo para com: "pido un nodo para com por unica vez, esto se hace aparte fuera del ciclo para no perderlo"
        com = new struct lista;
        com->num = n; //com apunta num que es n: es un valor numerico que yo ingreso.
        com->sig = NULL; //com apunta sig que es NULL !!!
        ant = com; //ahora com apunta a ant
 
        printf("\n ingrese otro numero de la lista: (0) para terminar ");
        scanf("%d", &n);
        fflush(stdin);
 
        while (n != 0)
        {
 
            p = new struct lista; //creo el nodo apuntado por p: "pido un nodo para p"
            p->num = n; //p apunta num que es n: es un valor numerico que yo ingreso.
            p->sig = NULL; //p apunta sig que es NULL !!!!
            ant->sig = p; //ant apunta a sig que es p (aca hago el enlace)
            ant = p; //ahora p apunta a ant
 
            printf("\n ingrese otro numero de la lista: (0) para terminar ");
            scanf("%d", &n);
            fflush(stdin);
        }
 
    }
 
}
 
void mostrar_lista(struct lista* com)
{
    struct lista* p;
    p = com;
 
    while (p != NULL)
    {
        printf("\n%d", p->num);
        p = p->sig;
    }
 
}
 
lista* revertir(lista* com)
{
    lista* ant = com;
    if (com->sig != 0)
    {
        ant = revertir(com->sig);
        (com->sig)->sig = com;
        com->sig = 0;
    }
    return ant;
}
 
void cargareves(struct lista*& com) {
    com = revertir(com);
}
 
void pausar()
{
    printf("\n");
    system("pause");
 
}
 
//-------------------------------------------------------------------------------------
 
int main()
{
    struct lista* comienzo;
 
    int num;
 
    //comienzo = new struct lista;
 
 
    printf("________________________________________________________ \n");
    printf("\n");
 
    armar_lista(comienzo);
    cargareves(comienzo);
    mostrar_lista(comienzo);
 
    printf("\n");
    printf("________________________________________________________ \n");
    printf("\n");
 
 
 
    pausar();
    printf("\n");
    printf("---------------------- Terminar ------------------");
 
    return 0;
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gaston
Val: 114
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

lista LSE los numeros queden insertados de atrás hacia adelante

Publicado por Gaston (40 intervenciones) el 17/10/2020 17:15:01
Mil gracias por el aporte. Funciona de maravillas !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

lista LSE los numeros queden insertados de atrás hacia adelante

Publicado por Rodrigo (539 intervenciones) el 17/10/2020 16:52:28
No entiendo bien lo que haces, esta medio enredado para mi.
Lo que tienes que hacer es insertar al inicio.

Deberias seguir una logica parecido a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lista miLista = null
do {
  numero = leerNumero();
  if( numero != 0 ) {
     // si existiera un constructor que recibiera el numero y el ptr siguiente
     nuevo_nodo = new lista(numero, miLista);
     // o bien
     //    nuevo_nodo = new lista;
     //    nuevo_nodo->valor = numero;
     //    nuevo_nodo->next = miLista;
 
     // insercion al inicio  \o/
     miLista = nuevo_nodo;
  }
} while( numero != 0 );
 
// En este punto miLista tiene el puntero al primero de la lista,
// que fue el ultimo en ser ingresado, y este un puntero al penultimo,
// etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar