YureSoaresq

Deque Duplamente Encadeado

Feb 11th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.34 KB | None | 0 0
  1. unit UDeque;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, Buttons, StdCtrls, ExtCtrls;
  8.  
  9. type
  10.   No = Record
  11.     Valor: String[10];
  12.     LE, LD: Pointer;
  13.   end;
  14.   TFDeque = class(TForm)
  15.     EditValor: TEdit;
  16.     Label1: TLabel;
  17.     RG: TRadioGroup;
  18.     EditDeque: TEdit;
  19.     Label2: TLabel;
  20.     Panel1: TPanel;
  21.     Button1: TButton;
  22.     Button2: TButton;
  23.     BitBtn1: TBitBtn;
  24.     procedure FormShow(Sender: TObject);
  25.     procedure Button1Click(Sender: TObject);
  26.     procedure RGClick(Sender: TObject);
  27.     procedure Button2Click(Sender: TObject);
  28.   private
  29.     { Private declarations }
  30.     procedure MostraDeque;
  31.     procedure InsereEsq;
  32.     procedure InsereDir;
  33.     procedure RetiraEsq;
  34.     procedure RetiraDir;
  35.   public
  36.     { Public declarations }
  37.   end;
  38.  
  39. var
  40.   D, Aux: ^No;
  41.   PDir, PEsq: Pointer;
  42.   FDeque: TFDeque;
  43.  
  44. implementation
  45.  
  46. {$R *.dfm}
  47.  
  48.  
  49. procedure TFDeque.FormShow(Sender: TObject);
  50. begin
  51.   PDir := nil;
  52.   PEsq := nil;
  53. end;
  54.  
  55. procedure TFDeque.Button1Click(Sender: TObject);
  56. begin
  57.   if EditValor.Text = '' then
  58.   begin
  59.     ShowMessage ('Valor inválido!');
  60.     EditValor.SetFocus;
  61.   end
  62.   else
  63.   begin
  64.     try
  65.       New(D);
  66.     Except
  67.       ShowMessage('Erro ao criar nó!');
  68.       EditValor.Clear;
  69.       EditValor.SetFocus;
  70.       Exit;
  71.     end;
  72.     if RG.ItemIndex = 0 then
  73.       InsereEsq
  74.     else
  75.       InsereDir;
  76.   end;
  77. end;
  78.  
  79. procedure TFDeque.InsereEsq;
  80. begin
  81.   D.Valor := EditValor.Text;
  82.   if PEsq = nil then
  83.   begin
  84.     PEsq := D;
  85.     PDir := D;
  86.     D.LE := D;
  87.     D.LD := D;
  88.   end
  89.   else
  90.   begin
  91.     Aux := PEsq;
  92.     Aux.LE := D;
  93.     D.LD := Aux;
  94.     D.LE := PDir;
  95.     PEsq := D;
  96.     Aux := PDir;
  97.     Aux.LD := PEsq;
  98.   end;
  99.   EditValor.Clear;
  100.   EditValor.SetFocus;
  101.   MostraDeque;
  102. end;
  103.  
  104. procedure TFDeque.MostraDeque;
  105. begin
  106.   EditDeque.Text := '| ';
  107.   Aux := PEsq;
  108.   While Aux <> PDir do
  109.   begin
  110.     EditDeque.Text := EditDeque.Text + Aux.Valor + ' | ';
  111.     Aux := Aux.LD;
  112.   end;
  113.   EditDeque.Text := EditDeque.Text + Aux.Valor + ' |';
  114. end;
  115.  
  116. procedure TFDeque.InsereDir;
  117. begin
  118.   D.Valor := EditValor.Text;
  119.   if PDir = nil then
  120.   begin
  121.     PDir := D;
  122.     PEsq := D;
  123.     D.LE := D;
  124.     D.LD := D;
  125.   end
  126.   else
  127.   begin
  128.     D.LE := PDir;
  129.     Aux := PDir;
  130.     Aux.LD := D;
  131.     PDir := D;
  132.     Aux := D;
  133.     Aux.LD := PEsq;
  134.     Aux := PEsq;
  135.     Aux.LE := PDir;
  136.   end;
  137.   EditValor.Clear;
  138.   EditValor.SetFocus;
  139.   MostraDeque;
  140. end;
  141.  
  142.  
  143. procedure TFDeque.RGClick(Sender: TObject);
  144. begin
  145.   EditValor.SetFocus;
  146. end;
  147.  
  148. procedure TFDeque.Button2Click(Sender: TObject);
  149. begin
  150.   if PDir = nil then
  151.   begin
  152.     ShowMessage('Deque vazio!');
  153.     EditValor.SetFocus;
  154.   end
  155.   else
  156.   begin
  157.     if PDir = PEsq then
  158.     begin
  159.       PDir := nil;
  160.       PEsq := nil;
  161.       EditDeque.Clear;
  162.       EditValor.SetFocus;
  163.     end
  164.     else
  165.     begin
  166.       if RG.ItemIndex = 0 then
  167.        RetiraEsq
  168.       else
  169.         RetiraDir;
  170.     end;
  171.   end;
  172. end;
  173.  
  174. procedure TFDeque.RetiraEsq;
  175. begin
  176.   Aux := PEsq;
  177.   Aux := Aux.LD;
  178.   PEsq := nil;
  179.   PEsq := Aux;
  180.   Aux.LE := PDir;
  181.   Aux := PDir;
  182.   Aux.LD := PEsq;
  183.   MostraDeque;
  184. end;
  185.  
  186. procedure TFDeque.RetiraDir;
  187. begin
  188.   Aux := PDir;
  189.   Aux := Aux.LE;
  190.   PDir := nil;
  191.   PDir := Aux;
  192.   Aux.LD := PEsq;
  193.   Aux := PEsq;
  194.   Aux.LE := PDir;
  195.   MostraDeque;
  196. end;
  197. end.
Advertisement
Add Comment
Please, Sign In to add comment