YureSoaresq

Deque Encadeado

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