Sortierte Listen auf Basis von verzeigerten Elementen III

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

CalendarMan.om
PROCEDURE InsertAppointment(VAR list: ListOfAppointments;
                            appointment: Appointment);
   VAR
      ptr, prev, element: Element;
BEGIN
   NEW(element); element.appointment := appointment;
   IF (list.first = NIL) OR
         (Op.Compare(appointment.time,
            list.first.appointment.time) < 0) THEN
      (* insert element at the beginning of the list *)
      element.next := list.first; list.first := element;
   ELSE
      prev := list.first; ptr := list.first.next;
      WHILE (ptr # NIL) &
            (Op.Compare(appointment.time,
               ptr.appointment.time) >= 0) DO
         prev := ptr; ptr := ptr.next;
      END;
      (* following holds now:
            (ptr = prev.next) &
            (appointment.time >= prev.appointment.time) &
            ((ptr = NIL) OR
               (appointment.time < ptr.appointment.time))
         we insert element between prev and ptr:
      *)
      element.next := ptr; prev.next := element;
   END;
   INC(list.length);
END InsertAppointment;

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999 Andreas Borchert, in HTML konvertiert am 29.06.1999