     procedure insert( key : typekey; var r : dataarray );
     var i : integer;
         temp : typekey;

     begin
     if n>=m then   Error     {*** table is full ***}
     else begin
          i := hashfunction( key ) ;
          while (not empty(r[i])) and (not deleted(r[i]))
               and (r[i].k<>key) do begin
               if r[i].k > key then begin
                    {*** Exchange key and continue ***}
                    temp := key;   key := r[i].k; r[i].k := temp
                    end;
               i := (i+increment(key)) mod m
               end;
          if empty(r[i]) or deleted(r[i]) then begin
               {*** do insertion ***}
               r[i].k := key;
               n := n+1
               end
          else Error     {*** key already in table ***}
          end
     end;
