2、L,i);j=i+1;while(j<=LENGTH(L)){y=GET(L,j);if(x==y)DELETE(L,j);elsej++;}i++;}}7/27/202142.2線性表的順序存儲結(jié)構(gòu)--順序表設(shè)線性表的基地址為:LOC(a1),ai的存儲地址為:LOC(ai)=LOC(a0)+i*k1<=i<=na0a1aian-1……a0a1aian-1……01n-1Loc(a0)Loc(a0)+kiLoc(a0)+i*kLoc(a0)+(n-1)*k7/27/20215線性表的定義為:typedefintdatatype;//假定線性表元素的類型為整型#defin
3、emaxsize1024//假定線性表的最大長度為1024typedefstruct{datatypedata[maxsize];intlast;//指向最后結(jié)點(diǎn)的位置}sequenlist;7/27/202161、先定義結(jié)構(gòu)類型,再定義變量名structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};Structstudentstudent1,student2;C語言中定義結(jié)構(gòu)的方法7/27/202172、在聲明類型的同時定義結(jié)構(gòu)變量structstudent{intnum;ch
4、arname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;7/27/202183、直接定義結(jié)構(gòu)變量struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;7/27/20219例:#defineMAXSIZE<最大元素個數(shù)>typedefstruct{charName[20];charSex;intAge;floatfareAmount;}datatype;7/27/202110線
5、性表元素的插入(在線性表L中第i個位置前插入新元素x)intINSERT(sequenlist*L,datatypex,inti){intj;if(((*L).last)>=maxsize-1){printf(“overflow”);returnNULL;}//溢出elseif((i<1)
6、
7、(i>((*L).last)+1){printf(“error”);returnNULL;}//非法位置else{for(j=(*L).last;j>=i-1;j--)(*L).data[j+1]=(*L).data[j];(*L).data[i-1]=x;(*L).las
8、t=(*L).last+1;}return(1);}7/27/202111線性表元素的刪除(在線性表L中刪除第i個元素)intDELETE(sequenlist*L,inti){intj;if((i<1)
9、
10、(i>(*L).last+1)){printf(“error”);returnNULL;}//非法位置else{for(j=i;j<=(*L).last;j++)(*L).data[j-1]=(*L).data[j];(*L).last--;//表長減1}return(1);}7/27/2021121、插入n/22、刪除(n-1)/23、按序號檢索O(1)4、按
11、內(nèi)容檢索n/2算法復(fù)雜性分析7/27/202113順序表的優(yōu)點(diǎn):無須為表示節(jié)點(diǎn)間的邏輯關(guān)系而增加額外的存儲空間可以方便的隨機(jī)存取表中的任一節(jié)點(diǎn)順序表的缺點(diǎn):插入和刪除運(yùn)算不方便由于要求占用連續(xù)的存儲空間,存儲分配只能預(yù)先進(jìn)行7/27/2021142.3線性表的鏈?zhǔn)酱鎯h不帶頭節(jié)點(diǎn)的鏈表帶頭節(jié)點(diǎn)的鏈表7/27/202115單鏈表結(jié)點(diǎn)的定義:typedefintdatatype;typedefstructnode{datatypedata;structnode*next;}linklist;節(jié)點(diǎn)的申請p=malloc(sizeof(link