sizewhich means array based implementation with fixed-sized arrays can only approximate the general concept for many applicationsthis is not problem because maximal number of list members can be determined priori ( the maximum number of students taking one particular module is limited by the total number of students in the universitymore general purpose implementations follow pointer based approachwhich is close to the diagrammatic representation given above we will not go into the details of all the possible implementations of lists herebut such information is readily available in the standard textbooks recursion we previously saw how iteration based on for-loops was natural way to process collections of items stored in arrays when items are stored as linked-liststhere is no index for each itemand recursion provides the natural way to process them the idea is to formulate procedures which involve at least one step that invokes (or callsthe procedure itself we will now look at how to implement two important derived procedures on listslast and appendwhich illustrate how recursion works to find the last element of list we can simply keep removing the first remaining item till there are no more left this algorithm can be written in pseudocode aslast(lif isempty(lerror('errorempty list in last'elseif isempty(rest( )return first(lelse return last(rest( )the running time of this depends on the length of the listand is proportional to that lengthsince last is called as often as there are elements in the list we say that the procedure has linear time complexitythat isif the length of the list is increased by some factorthe execution time is increased by the same factor compared to the constant time complexity which access to the last element of an array hasthis is quite bad it does not meanhoweverthat lists are inferior to arrays in generalit just means that lists are not the ideal data structure when program has to access the last element of long list very often another useful procedure allows us to append one list to another list againthis needs to be done one item at timeand that can be accomplished by repeatedly taking the first remaining item of and adding it to the front of the remainder appended to append( , if isempty( return else return makelist(first( ),append(rest( ), )the time complexity of this procedure is proportional to the length of the first listl since we have to call append as often as there are elements in