Here is an implementation for the array-based list, named AList.
AList inherits from the List ADT,and so must implement all of the member functions of List.
// Array-based list implementationclassAListimplementsList{privateObjectlistArray[];// Array holding list elementsprivatestaticfinalintDEFAULT_SIZE=10;// Default sizeprivateintmaxSize;// Maximum size of listprivateintlistSize;// Current # of list itemsprivateintcurr;// Position of current element// Constructors// Create a new list object with maximum size "size"AList(intsize){maxSize=size;listSize=curr=0;listArray=newObject[size];// Create listArray}// Create a list with the default capacityAList(){this(DEFAULT_SIZE);}// Just call the other constructorpublicvoidclear()// Reinitialize the list{listSize=curr=0;}// Simply reinitialize values// Insert "it" at current positionpublicbooleaninsert(Objectit){if(listSize>=maxSize)returnfalse;for(inti=listSize;i>curr;i--)// Shift elements uplistArray[i]=listArray[i-1];// to make roomlistArray[curr]=it;listSize++;// Increment list sizereturntrue;}// Append "it" to listpublicbooleanappend(Objectit){if(listSize>=maxSize)returnfalse;listArray[listSize++]=it;returntrue;}// Remove and return the current elementpublicObjectremove(){if((curr<0)||(curr>=listSize))// No current elementreturnnull;Objectit=listArray[curr];// Copy the elementfor(inti=curr;i<listSize-1;i++)// Shift them downlistArray[i]=listArray[i+1];listSize--;// Decrement sizereturnit;}publicvoidmoveToStart(){curr=0;}// Set to frontpublicvoidmoveToEnd(){curr=listSize;}// Set at endpublicvoidprev(){if(curr!=0)curr--;}// Move leftpublicvoidnext(){if(curr<listSize)curr++;}// Move rightpublicintlength(){returnlistSize;}// Return list sizepublicintcurrPos(){returncurr;}// Return current position// Set current list position to "pos"publicbooleanmoveToPos(intpos){if((pos<0)||(pos>listSize))returnfalse;curr=pos;returntrue;}// Return true if current position is at end of the listpublicbooleanisAtEnd(){returncurr==listSize;}// Return the current elementpublicObjectgetValue(){if((curr<0)||(curr>=listSize))// No current elementreturnnull;returnlistArray[curr];}// Check if the list is emptypublicbooleanisEmpty(){returnlistSize==0;}publicStringtoString(){StringBufferout=newStringBuffer((listSize+1)*4);out.append("< ");for(inti=0;i<curr;i++){out.append(listArray[i]);out.append(" ");}out.append("| ");for(inti=curr;i<listSize;i++){out.append(listArray[i]);out.append(" ");}out.append(">");returnout.toString();}}
// Array-based list implementationclassAListimplementsList{privateObjectlistArray[];// Array holding list elementsprivatestaticfinalintDEFAULT_SIZE=10;// Default sizeprivateintmaxSize;// Maximum size of listprivateintlistSize;// Current # of list itemsprivateintcurr;// Position of current element// Constructors// Create a new list object with maximum size "size"AList(intsize){maxSize=size;listSize=curr=0;listArray=newObject[size];// Create listArray}// Create a list with the default capacityAList(){this(DEFAULT_SIZE);}// Just call the other constructorvoidclear()// Reinitialize the list{listSize=curr=0;}// Simply reinitialize values// Insert "it" at current positionbooleaninsert(Objectit){if(listSize>=maxSize)returnfalse;for(inti=listSize;i>curr;i--)// Shift elements uplistArray[i]=listArray[i-1];// to make roomlistArray[curr]=it;listSize++;// Increment list sizereturntrue;}// Append "it" to listbooleanappend(Objectit){if(listSize>=maxSize)returnfalse;listArray[listSize++]=it;returntrue;}// Remove and return the current elementObjectremove(){if((curr<0)||(curr>=listSize))// No current elementreturnnull;Objectit=listArray[curr];// Copy the elementfor(inti=curr;i<listSize-1;i++)// Shift them downlistArray[i]=listArray[i+1];listSize--;// Decrement sizereturnit;}voidmoveToStart(){curr=0;}// Set to frontvoidmoveToEnd(){curr=listSize;}// Set at endvoidprev(){if(curr!=0)curr--;}// Move leftvoidnext(){if(curr<listSize)curr++;}// Move rightintlength(){returnlistSize;}// Return list sizeintcurrPos(){returncurr;}// Return current position// Set current list position to "pos"booleanmoveToPos(intpos){if((pos<0)||(pos>listSize))returnfalse;curr=pos;returntrue;}// Return true if current position is at end of the listbooleanisAtEnd(){returncurr==listSize;}// Return the current elementObjectgetValue(){if((curr<0)||(curr>=listSize))// No current elementreturnnull;returnlistArray[curr];}}
// Array-based list implementationclassAList<E>implementsList<E>{privateElistArray[];// Array holding list elementsprivatestaticfinalintDEFAULT_SIZE=10;// Default sizeprivateintmaxSize;// Maximum size of listprivateintlistSize;// Current # of list itemsprivateintcurr;// Position of current element// Constructors// Create a new list object with maximum size "size"@SuppressWarnings("unchecked")// Generic array allocationAList(intsize){maxSize=size;listSize=curr=0;listArray=(E[])newObject[size];// Create listArray}// Create a list with the default capacityAList(){this(DEFAULT_SIZE);}// Just call the other constructorpublicvoidclear()// Reinitialize the list{listSize=curr=0;}// Simply reinitialize values// Insert "it" at current positionpublicbooleaninsert(Eit){if(listSize>=maxSize)returnfalse;for(inti=listSize;i>curr;i--)// Shift elements uplistArray[i]=listArray[i-1];// to make roomlistArray[curr]=it;listSize++;// Increment list sizereturntrue;}// Append "it" to listpublicbooleanappend(Eit){if(listSize>=maxSize)returnfalse;listArray[listSize++]=it;returntrue;}// Remove and return the current elementpublicEremove(){if((curr<0)||(curr>=listSize))// No current elementreturnnull;Eit=listArray[curr];// Copy the elementfor(inti=curr;i<listSize-1;i++)// Shift them downlistArray[i]=listArray[i+1];listSize--;// Decrement sizereturnit;}publicvoidmoveToStart(){curr=0;}// Set to frontpublicvoidmoveToEnd(){curr=listSize;}// Set at endpublicvoidprev(){if(curr!=0)curr--;}// Move leftpublicvoidnext(){if(curr<listSize)curr++;}// Move rightpublicintlength(){returnlistSize;}// Return list sizepublicintcurrPos(){returncurr;}// Return current position// Set current list position to "pos"publicbooleanmoveToPos(intpos){if((pos<0)||(pos>listSize))returnfalse;curr=pos;returntrue;}// Return true if current position is at end of the listpublicbooleanisAtEnd(){returncurr==listSize;}// Return the current elementpublicEgetValue(){if((curr<0)||(curr>=listSize))// No current elementreturnnull;returnlistArray[curr];}publicStringtoString(){StringBufferout=newStringBuffer((listSize+1)*4);out.append("< ");for(inti=0;i<curr;i++){out.append(listArray[i]);out.append(" ");}out.append("| ");for(inti=curr;i<listSize;i++){out.append(listArray[i]);out.append(" ");}out.append(">");returnout.toString();}//Tell if the list is empty or notpublicbooleanisEmpty(){returnlistSize==0;}}
// Array-based list implementationclassAList:publicList{ListItemTypelistArray[MAX_SIZE];//Array holding list elementsintlistSize;//Current number of list itemsintcurr;//Position of current elementpublic://Constructor// Create a new list element with maximum size "MAX_SIZE"AList():listSize(0){//Initial the arrayfor(intk=0;k<MAX_SIZE;k++)listArray[k]=0;}//end constructorboolisEmpty()const{returnlistSize==0;}voidclear(){// Reinitialize the listlistSize=curr=0;// Simply reinitialize values}// Insert "it" at current positionboolinsert(constListItemType&it){if(listSize>=MAX_SIZE)returnfalse;for(inti=listSize;i>curr;i--)//Shift elements uplistArray[i]=listArray[i-1];//to make roomlistArray[curr]=it;listSize++;//Increment list sizereturntrue;}// Append "it" to listboolappend(constListItemType&it){if(listSize>=MAX_SIZE)returnfalse;listArray[listSize++]=it;returntrue;}// Remove and return the current elementListItemTyperemove(){if((curr<0)||(curr>=listSize))// No current elementreturn0;ListItemTypeit=listArray[curr];// Copy the elementfor(inti=curr;i<listSize;i++)// Shift them downlistArray[i]=listArray[i+1];listSize--;// Decrement sizereturnit;}voidmoveToStart(){curr=0;}// Set to frontvoidmoveToEnd(){curr=listSize;}// Set to endvoidprev(){if(curr!=0)curr--;}// Move leftvoidnext(){if(curr<listSize)curr++;}// Move rightintlength(){returnlistSize;}// Return list sizeintcurrPos(){returncurr;}// Return current position// Set current list position to "pos"boolmoveToPos(intpos){if((pos<0)||(pos>listSize))returnfalse;curr=pos;returntrue;}// Return true if current position is at end of the listboolisAtEnd(){returncurr==listSize;}// Return the current elementListItemTypegetValue(){if((curr<0)||(curr>=listSize))// No current elementreturn0;returnlistArray[curr];}};
Because the array-based list implementation is defined to store list
elements in contiguous cells of the array, the insert, append,
and remove methods must maintain this property.
Removing an element from the head of the list is
similar to insert in that all remaining elements must shift toward
the head by one position to fill in the gap.
If we want to remove the element at position i, then
n−i−1 elements must shift toward the head, as shown in the
following slideshow.
Aside from insert and remove, the only other operations that
might require more than constant time are the constructor and
clear.
The other methods for Class AList simply
access the current list element or move the current position.
They all require Θ(1) time.