All pastes #982409 Raw Edit

Something

public text v1 · immutable
·published 2008-04-12 15:19 UTC
rendered paste body
program list;

type
  PElement = ^Element;
  Element = record
    data: integer;
    prev: PElement;
    next: PElement;
  end;

procedure list_create(var head: PElement; data: integer);
begin
  new(head);
  head^.data := data;
  head^.next := head;
  head^.prev := head;
end;

procedure list_appbeg(var head: PElement; data: integer);
var
  p: PElement;
begin
  new(p);
  p^.data := data;
  head^.prev^.next := p;
  p^.prev :=  head^.prev;
  head^.prev := p;
  p^.next := head;
  head := p;
end;

procedure list_print(head: PElement);
var
  p: PElement;
begin
  p := head;
  repeat
    writeln(p^.data);
    p := p^.next;
  until p = head;
end;

procedure search_middle(var head: PElement; var i:integer);
var
  p: PElement;
begin
  p := head^.next;
  i := 1;
  while p <> head do
    begin
      p := p^.next;
      i := i+1;
    end;
  i := i div 2 - 1;
end;

procedure add_in_middle(var head:PElement; i:integer);
var
  p, k: PElement;
  poz: integer;
begin
  p:= head;
  for poz:=1 to i do
    p := p^.next;
  new(k);
  writeln('Input data of new element:');
  read(k^.data);
  p^.next^.prev := k;
  k^.next := p^.next;
  k^.prev:=p;
  p^.next := k;
end;

procedure search_min(head:PElement; var min:PElement);
var
  p:PElement;
begin
  min:=head;
  p:=head;
  repeat
    p:=p^.next;
    if min^.data>p^.data then min:=p
  until p=head
end; 

procedure delete_min(var min:PElement);
begin
  min^.next^.prev := min^.prev;
  min^.prev^.next := min^.next;
  dispose(min);
end;




var
  head:   PElement;
  p:      PElement;
  min:    PElement;
  data:   integer;
  i, num: integer;
  action: integer;
begin
  writeln('Create list:');
  write('Enter data of first element: ');
  read(data);
  list_create(head, data);
  writeln('Input number of element, which You want to add: ');
  read(num);
  writeln('Input data: ');
  for i:=1 to num do
  begin
    read(data);
    list_appbeg(head, data);
  end;
  writeln('After adding in begin: ');
  list_print(head);
  writeln('Adding in middle: ');
  search_middle(head, i);
  add_in_middle(head, i);
  writeln('After adding in middle: ');
  list_print(head);
  writeln('After deleting minimal element: ');
  search_min(head,min);
  delete_min(min);
  list_print(head);
end.