Download - Implementação Estrutura de Dados

Transcript

FACULDADES INTEGRADAS STELLA MARIS ANDRADINA FISMA

FACULDADES INTEGRADAS STELLA MARIS ANDRADINA FISMA

MRCIO FERRAZ

(RM 2735)

IMPLEMENTAO DE ESTRUTURA DE DADOSPROFESSOR MRCIO TORRENTEANDRADINA / SP

2010

A partir do programa que implementar uma lista encadeada capas de incluir um e-mail na lista, complemente o mesmo programa permitindo a excluso de e-mail desta lista.

Para isso, aps ler um e-mail e for diferente de fim, localiz-lo na lista. Caso j exista pergunte se deseja exclu-lo. Antes de proceder a excluso. Caso no exista proceder excluso.

program lista_de_emails;uses wincrt;const max=10; var lista:array[1..max]of string; proximo:array[1..max]of integer; fila:array[1..max]of integer; inicio,n,atual,anterior,primeiro,ultimo,qtd:integer; email: string; resp: char;procedure enqueue(dado:integer); begin if qtd = max then writeln('fila cheia') else begin if ultimo = max then ultimo:= 1 else begin if ultimo = max then fila[ultimo] := dado; qtd:= qtd + 1; end; end;procedure inicializafila; var i:=integer; begin for i:= 1 to max do enqueue(i); end;function dequeue : string;begin if qtd = 0 then

writeln ('fila vazia!') else

dequeue := fila[primeiro];

primeiro := primeiro + 1;

qtd := qtd + 1;end;procedure mostralista; begin atual := inicio; while atual 0 do begin writelbn(lista[atual]); atual := proximo[atual]; end; end;procedure excluidoinicio;begin inicio := proximo[atual]; n := n - 1; enqueue (atual);end;procedure excluidomeio;begin proximo[anterior] := proximo[atual]; n := n -1; enqueue (atual);end;procedure excluidofim;begin proximo[anterior] := 0; n := n - 1; enqueue (atual);end;procedure localizar(dado:string); begin ataul:= inicio; while (dado > lista[atual]) and (proximo[atual] 0 ) do begin anterior := atual; atual:= proximo[atual]; end;procedure incluirnoinicio (dado:string); begin novo:=dequeue; lista[novo] := dado; inicio:novo; proximo[novo] := atual; n:=n+1; end;procedure incluirnomeio(dado:string); begin novo:= dequeue; lista[novo] := dado; proximo[anterior] := novo; proximo[novo] := atual; n:= n + 1; end;procedure incluirnofim(dado:string); begin novo:=dequeue; lista[novo] := dado; proximo[anterior]:= novo; proximo[novo] := atual; n:=n +1; end;procedure excluir (dado : string);begin localizar (dado); if atual = 0 then begin

excluidoinicio (dado); end;

else begin

if (atual = inicio) and (dado < lista[atual]) then

excluidoinicio (dado);

end;

else begin

if (proximo[atual] = 0) and (dado > lista[atual]) then

excluidofim (dado);

else

excluidomeio (dado);

end; end;end;procedure incluir(dado:string); begin localizar(dado); if atual = 0 then incluirnoinicio(dado) else if dado = lista[atual] then begin

writeln ('este email j consta na agenda! deseja exclu-lo? (s/n)' );

resp := readkey;

if resp = 's' then

excluir (dado); end; else begin if (atual =inicio) and (dado < lista[atual]) then incluirnoinicio(dado) else if (proximo[atual] = 0) and (dado> lista[atual]) then incluirnofim(dado) else incluirnomeio(dado); end;begin inicio:=0; ultimo:=0; primeiro:=1; inicializafila; n:=0; repeat clrscr; writeln('lista de emails:'); mostrarlista; writeln; writeln('entre novo email(dig. "fim" para encerrar)'); readln(email); if email'fim then incluir(email) until email='fim';end.