Como puedo hacer el siguiente program de listas

Tengo un problema en pascal de una program que implemnta listas y no se como hacerlo!
Acá te dejo el enunciado fíjate si me podes ayudar.. Estaría muy agradecido!
""Se tiene una lista ordenada en forma ascendente, se desea eliminar de ella el elemento del medio y retornar la lista original sin el mismo. Implementar con Punteros.""
1

1 respuesta

Respuesta
1
Tienes algo hecho así no me mato escribiendo...
Sino, te lo puedo armar para mañana o pasado...
Hola acá te dejo lo que yo había echo es lo básico, carga elprimerelemnto dela lista después y dps en otro procedure cargo los demás elementos en forma ordenada! Y luego en otro procedure la recorro yla imprimo con los valores que tiene!
Me falta el procedure que elemine el elemento del medio de la lista y luego retorne la misma pero sin ese elemento! Mi problema es que no se como buscar el elemento del medio y eliminarlo!
Lo que te mando corre bárbaro! Fíjate si podesllegar a hacerlo para el viernes en lo posible te lo agradecería mucho! Desde ya muchas gracias!
Saludos!
Esteban
Program eje7tp3;
type puntero= ^nodo;
nodo=record
num:integer;
sig:puntero;
end;
Procedure CrearLista(var lista:puntero; elem:integer);
var nue:puntero;
begin
new(nue);
writeln('Ingrese el primer elemto de la lista');
read(elem);
nue^.num:=elem;
nue^.sig:=nil;
lista:=nue;
end;
Procedure InsertarDemasElementos(var lista:puntero; elem:integer);
var nue, act, ult:puntero;
begin
new(nue);
writeln('Ingrese los demas elemtos a cargar');
readln (elem);
nue^.num:=elem;
nue^.sig := nil;
act:=lista;
ult:=lista;
while ( (act<>nil) and (act^.num < nue^.num)) do
begin
ult:=act;
act:=act^.sig;
end;
if (act=ult) then
lista:=nue
else
ult^.sig:=nue;
nue^.sig:=act;
end;
procedure imprimirLista (var a : puntero);
var aux : puntero;
begin
aux := a;
while (aux <> nil) do
begin
writeln ('Elemento: ', aux^.num);
aux := aux^.sig;
end;
end;
var lista:puntero;
elem, opcion:integer;
begin
CrearLista(lista, elem);
repeat
writeln;
writeln ('Seleccione una opcion');
writeln ('1 - Ingresar elemento');
writeln ('2 - Salir');
write ('Su opcion: '); readln (opcion);
if opcion = 1 then
InsertarDemasElementos(lista, elem);
until opcion = 2;
imprimirLista (lista);
readln;
end.
Si, lo acepto, te lo modifique un poquito... pero fíjate ajjajaj
Program eje7tp3;
type puntero= ^nodo;
     nodo=record
            num:integer;
            sig:puntero;
          end;
Procedure Insertar(var lista:puntero);
var nue, act:puntero;
begin
  new(nue);
  writeln('Ingrese el elemento a cargar');
  readln (nue^.num);
  nue^.sig := nil;
  act:=lista;
  if (act = nil) 
   then lista := nue
   else begin
          if (act^.num > nue^.num)
             then begin
                    nue^.sig := lista;
                    lista := nue;
                  end
             else Begin
                   while ( (act^.sig<>nil) and (act^.num < nue^.num)) do
                     act:=act^.sig;
                   nue^.sig:=act^.sig;
                   act^.sig := nue;
                 end;
         end;
end;
procedure imprimirLista (a : puntero);
begin
  if (a = nil)
    then WriteLn('La lista esta vacia')
    else Begin
          while (a <> nil) do
            begin
              writeln ('Elemento: ', a^.num);
              a := a^.sig;
            end;
         end;
end;
procedure Eliminar (var a : puntero);
var elem:Integer;
    aux, ant:Puntero;
Begin
  write('Ingrese el elemento a eliminar:');
  readln (elem);
  aux:=a;
  ant:=a;
  While ((aux <> Nil) and (aux^.num <> elem)) Do
   Begin
    ant:=aux;
    aux:=aux^.sig;
   End;
  if (aux^.num = elem)
    Then Begin
            WriteLn('Elemento eliminado');
            if (ant = aux)
                then a:=a^.sig
                else ant^.sig:=aux^.sig;
         End
    Else WriteLn('Elemento no encontrado');
End;
var lista:puntero;
    opcion:integer;
begin
  new(lista);
  lista := nil;
  repeat
   repeat
    writeln;
    writeln ('Seleccione una opcion');
    writeln ('1 - Ingresar elemento');
    writeln ('2 - Eliminar elemento');
    writeln ('3 - Mostrar lista');
    writeln ('0 - Salir');
    write ('Su opcion: ');
    readln (opcion);
   until ((opcion >= 0) and (opcion <=3));
   case opcion of
     1: Insertar(lista);
     2: Eliminar(lista);
     3: imprimirLista (lista);
   End;
  until opcion = 0;
end.
Hola de nuevo! Che el programa anda genial muchísimas gracias!
Te hago una ultima pregunta y no te molesto más a si dps te punteo..., a mi el enunciado me pide lo siguiente:
""Se tiene una lista ordenada en forma ascendente, se
desea eliminar de ella el elemento del medio y retornar la lista original sin el
mismo. Implementar con Punteros""
¿Me gustaría saber como hago una ves que cargue elementos en la lista para el eliminar el elemento que tenga en el medio? ¿Es eso solo y nada más! Si no podes o no tienes tiempo todo bien no hay problema! Muchas gracias un saludo!
Esteban!
Haha, no me di cuenta de eso.
Una de las formas, pude ser poner un contador para que cuente los elementos insertados y luego, al momento de eliminar el medio, solo recorres (como si estuvises por imprimir, pero sin imprimir) y cuando llegas al n/2, eliminas ese elemento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas