Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit UQueue;
- interface
- uses
- StdCtrls, SysUtils;
- type
- TElement = Integer;
- TLinkNode = ^TNode;
- TNode = record
- P: TElement;
- Next: TLinkNode;
- Prev: TLinkNode;
- end;
- TMyQueue = class
- _out: TLinkNode;
- _in: TLinkNode;
- constructor Create;
- destructor Destroy;
- function QEmpty: Boolean;
- procedure QClear;
- procedure QAdd(PCB: TElement; prior: integer);
- procedure QDel(var PCB: TElement);
- procedure View(M: TMemo);
- end;
- var temp: integer;
- implementation
- constructor TMyQueue.Create;
- begin
- _in := nil;
- _out := nil;
- temp := -5;
- end;
- destructor TMyQueue.Destroy;
- begin
- QClear;
- end;
- procedure TMyQueue.QAdd(PCB: TElement; prior: integer);
- var R: TLinkNode;
- begin
- New(R);
- R^.P := PCB;
- R^.Next := nil;
- R^.Prev^.Next := R;
- if qEmpty then
- begin
- _in := R;
- _out := R;
- end
- else
- begin
- if prior >= temp then
- begin
- _in^.Next := R;
- _in := R;
- temp := prior;
- end
- else
- begin
- _in := R;
- _in^.Prev := R;
- temp := prior;
- end;
- end;
- end;
- procedure TMyQueue.QClear;
- var R: TElement;
- begin
- while not QEmpty do QDel(R);
- _out := nil;
- end;
- procedure TMyQueue.QDel(var PCB: TElement);
- var R: TLinkNode;
- begin
- R := _out;
- if not QEmpty then
- begin
- PCB := R^.P;
- _out := _out^.Next;
- Dispose(R);
- end;
- if _out = nil then
- _in := nil;
- end;
- function TMyQueue.QEmpty: Boolean;
- begin
- QEmpty := _out = nil;
- end;
- procedure TMyQueue.View(M: TMemo);
- var Cur: TLinkNode;
- begin
- Cur := _out;
- M.Clear;
- while Cur <> nil do
- begin
- M.Lines.Add(IntToStr(Cur.P));
- Cur := Cur.Next;
- end;
- end;
- end.
Add Comment
Please, Sign In to add comment