1AbstractDataTypesCS217RecapofLastTime• ModularityiskeytogoodsoftwareDecomposeprogramintomodulesProvideclearandflexibleinterfaces• AdvantagesSeparatecompilationEasiertounderstandEasiertotestanddebugEasiertoreusecodeEasiertomakechanges2ModularityinC• UsefeaturesofprogramminglanguagetoenhancemodularitystructtypedefopaquepointersvoidpointersfunctionpointersStructures#include<stdio.h>#include“stringarray.h”int main(){structStringArray *stringarray =malloc( sizeof(structStringArray));stringarray->nstrings=0;ReadStrings(stringarray,stdin);SortStrings(stringarray);WriteStrings(stringarray,stdout);free(stringarray);return0;}#defineMAX_STRINGS128structStringArray{char*strings[MAX_STRINGS];intnstrings;};externvoidReadStrings(struct StringArray *stringarray,FILE*fp);externvoidWriteStrings(structStringArray *stringarray,FILE*fp);externvoid SortStrings(structStringArray *stringarray);sort.cstringarray.h3Typedef#include<stdio.h>#include“stringarray.h”int main(){StringArray_T stringarray =malloc( sizeof(structStringArray));stringarray->nstrings=0;ReadStrings(stringarray,stdin);SortStrings(stringarray);WriteStrings(stringarray,stdout);free(stringarray);return0;}#defineMAX_STRINGS128typedef structStringArray{char*strings[MAX_STRINGS];intnstrings;}*StringArray_T;externvoidReadStrings(StringArray_T stringarray,FILE*fp);externvoidWriteStrings(StringArray_T stringarray,FILE*fp);externvoid SortStrings(StringArray_T stringarray);sort.cstringarray.hOpaquePointers#include“stringarray.h”#defineMAX_ELEMENTS128struct StringArray {void*elements[MAX_ELEMENTS];int num_elements;};etc.typedefstructStringArray *StringArray_T;extern StringArray_T NewStrings(void);externvoidFreeStrings(StringArray_Tstringarray);externvoid ReadStrings(StringArray_T stringarray,FILE*fp);externvoidWriteStrings(StringArray_T stringarray,FILE*fp);externvoid SortStrings(StringArray_T stringarray);stringarray.cstringarray.h4AbstractDataTypes(ADTs)• ModulesupportingoperationsonsingledatastructureInterfacedeclaresoperations,notdatastructure– Interfaceprovidesaccesstosimple,completesetofoperations– InterfaceprovidesflexibilityandextensibilityWhatwouldbeamoregeneralADT?typedefstructStringArray *StringArray_T;extern StringArray_T NewStrings(void);externvoidFreeStrings(StringArray_Tstringarray);externvoid ReadStrings(StringArray_T stringarray,FILE*fp);externvoidWriteStrings(StringArray_T stringarray,FILE*fp);externvoid SortStrings(StringArray_T stringarray);stringarray.hArrayADT- InterfacetypedefstructArray*Array_T;externArray_TArray_new(void);externvoidArray_free(Array_Tarray);extern int Array_getLength(Array_Tarray);externchar*Array_getData(Array_Tarray, int index);extern int Array_getIndex(Array_Tarray,char*str);externvoidArray_append(Array_Tarray,char*str);externvoidArray_insert(Array_Tarray, int index,char*str);externvoidArray_replace(Array_Tarray, int index,char*str);externvoidArray_remove(Array_Tarray,int index);externvoidArray_sort(Array_Tarray);array.h5ExampleADT- Client#include“array.h”#include<stdio.h>int main(){Array_Tarray;int i;array=Array_new();Array_append(array,“CS217”);Array_append(array,“IS”);Array_append(array,“FUN”);for(i=0;i<Array_getLength(array);i++){char*str=Array_getData(array,i);printf(str);}Array_free(array);return0;}client.cExampleADT- Implementation#include“array.h”#defineMAX_ELEMENTS128structArray{char*elements[MAX_ELEMENTS];intnum_elements;};Array_TArray_new(void){Array_Tarray= malloc(sizeof(structArray));array->num_elements=0;returnarray;}voidArray_free(Array_Tarray){free(array);}array.c(1of5)6ExampleADT- Implementationint Array_getLength(Array_Tarray){returnarray->num_elements;}void*Array_getData(Array_Tarray, int index){returnarray->elements[index];}int Array_getIndex(Array_Tarray,char*str){int index;for(index=0;index<array->num_elements;index++){if(array->elements[index]== str){returnindex;break;}}return-1;}array.c(2of5)ExampleADT- ImplementationvoidArray_append(Array_Tarray,char*str){int index=array->num_elements;array->elements[index]= str;array->num_elements++;}voidArray_replace(Array_Tarray, int index,char*str){array->elements[index]= str;}array.c(3of5)7ExampleADT- ImplementationvoidArray_insert(Array_Tarray, int index,char*str){int i;for(i=array->num_elements;i>index;i--)array->elements[i]=array->elements[i-1];array->elements[index]= str;array->num_elements++;}voidArray_remove(Array_Tarray, int index){int i;for(i=index+1;i<array->num_elements;i++)array->elements[i-1]=array->elements[i];array->num_elements--;}array.c(4of5)ExampleADT- ImplementationvoidArray_sort(Array_Tarray){int i,j;for(i=0;i<array->num_elements;i++){for(j=i+1;j<array->num_elements;j++){if(strcmp(array->elements[i],array->elements[j])>0){char*swap=array->elements[i];array->elements[i]=array->elements[j];array->elements[j]=swap;}}}}array.c(5of5)8AbstractDataTypes(ADTs)• ModulesupportingoperationsonsingledatastructureInterfacedeclaresoperations,notdatastructureInterfaceprovidesaccesstosimple,completesetofoperationsInterfaceprovidesflexibilityandextensibilitytypedefstructArray*Array_T;externArray_TArray_new(void);externvoidArray_free(Array_Tarray);extern int Array_getLength(Array_Tarray);externchar*Array_getData(Array_Tarray, int index);extern int
View Full Document