Guest User

Untitled

a guest
Jan 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.77 KB | None | 0 0
  1. unit UQueue;
  2.  
  3. interface
  4. uses
  5.   StdCtrls, SysUtils;
  6. type
  7.   TElement = Integer;
  8.  
  9.   TLinkNode = ^TNode;
  10.   TNode = record
  11.     P: TElement;
  12.     Next: TLinkNode;
  13.     Prev: TLinkNode;
  14.   end;
  15.   TMyQueue = class
  16.     _out: TLinkNode;
  17.     _in: TLinkNode;
  18.     constructor Create;
  19.     destructor Destroy;
  20.     function QEmpty: Boolean;
  21.     procedure QClear;
  22.     procedure QAdd(PCB: TElement; prior: integer);
  23.     procedure QDel(var PCB: TElement);
  24.     procedure View(M: TMemo);
  25.   end;
  26.  
  27. var temp: integer;
  28.  
  29. implementation
  30.  
  31. constructor TMyQueue.Create;
  32. begin
  33.   _in := nil;
  34.   _out := nil;
  35.   temp := -5;
  36. end;
  37.  
  38. destructor TMyQueue.Destroy;
  39. begin
  40.   QClear;
  41. end;
  42.  
  43. procedure TMyQueue.QAdd(PCB: TElement; prior: integer);
  44. var R: TLinkNode;
  45. begin
  46.   New(R);
  47.   R^.P := PCB;
  48.   R^.Next := nil;
  49.   R^.Prev^.Next := R;
  50.   if qEmpty then
  51.     begin
  52.       _in := R;
  53.       _out := R;
  54.     end
  55.   else
  56.     begin
  57.       if prior >= temp then
  58.         begin
  59.           _in^.Next := R;
  60.           _in := R;
  61.           temp := prior;
  62.         end
  63.       else
  64.         begin
  65.           _in := R;
  66.           _in^.Prev := R;
  67.           temp := prior;
  68.         end;
  69.     end;
  70. end;
  71.  
  72. procedure TMyQueue.QClear;
  73. var R: TElement;
  74. begin
  75.   while not QEmpty do QDel(R);
  76.   _out := nil;
  77. end;
  78.  
  79. procedure TMyQueue.QDel(var PCB: TElement);
  80. var R: TLinkNode;
  81. begin
  82.   R := _out;
  83.   if not QEmpty then
  84.   begin
  85.     PCB := R^.P;
  86.     _out := _out^.Next;
  87.  
  88.     Dispose(R);
  89.   end;
  90.   if _out = nil then
  91.     _in := nil;
  92. end;
  93.  
  94. function TMyQueue.QEmpty: Boolean;
  95. begin
  96.   QEmpty := _out = nil;
  97. end;
  98.  
  99. procedure TMyQueue.View(M: TMemo);
  100. var Cur: TLinkNode;
  101. begin
  102.   Cur := _out;
  103.   M.Clear;
  104.   while Cur <> nil do
  105.   begin
  106.     M.Lines.Add(IntToStr(Cur.P));
  107.     Cur := Cur.Next;
  108.   end;
  109. end;
  110.  
  111.  
  112. end.
Add Comment
Please, Sign In to add comment