*顺序表[数组法]
基礎(chǔ)結(jié)構(gòu):
#define MAXSIZE 100 typedef struct seqlist {int List[MAXSIZE];int length; }SeqList;?模型建立之后,就可以創(chuàng)建一個(gè)實(shí)在的東西
SeqList L;現(xiàn)在需要對(duì)線性表進(jìn)行初始化操作,這里用的是把length置為0。
void InitList(SeqList &L) {L.length=0; }插入操作
主要有三個(gè)部分
[1] 插入之前,進(jìn)行判定。這個(gè)判定又分兩種情況:<1>插入元素的位置是否合法? 這里,合理的范圍是在[1,L->length+1]之間,比如,在第5個(gè)位置插入,這里指的是序號(hào)。<2>線性表是否已滿(mǎn) ?如果表已滿(mǎn),就不能再進(jìn)行插入操作,判定為:L.length>=MAXSIZE
[2]移動(dòng)數(shù)據(jù)。對(duì)于插入來(lái)說(shuō),是先從后面移動(dòng),直到位置i。
借用一個(gè)變量j進(jìn)行移動(dòng),這里序號(hào)和編號(hào)就纏繞在一起。
for(j=L.length;j>=i;j--) /*元素移動(dòng)*/L.List[j]=L.List[j-1];[3]將元素賦值,最后將length+1;
int InsertElem(SeqList &L,int i,int e) {int j;if(i<1 || i>L.length+1){cout<<"超出位置范圍"<<endl;return -1;}else if(L.length>=MAXSIZE){cout<<"表已滿(mǎn)"<<endl;return -1;}for(j=L.length;j>=i;j--) /*元素移動(dòng)*/L.List[j]=L.List[j-1];L.List[i-1]=e;L.length++; /*插入數(shù)據(jù)后,不能忘記將length+1*/return 0; }刪除操作:
和插入類(lèi)似,也需要進(jìn)行幾步操作, [1] 判定范圍 ?[2]刪除操作 [3]線性表長(zhǎng)度減1;
int DeleteList(SeqList &L,int i,int *e) {int j;if(L.length<=0) /*線性表為空*/return -1;else if(i<1 || i>L.length) /*超越范圍*/return -1;*e=L.List[i-1];for(j=i;j<=L.length-1;j++)L.List[j-1]=L.List[j];L.length--;/*線性表長(zhǎng)度減1*/return 0; }for(j=i;j<=L.length-1;j++),在這一句中,經(jīng)過(guò)計(jì)算,如果刪除末位的元素,則不會(huì)產(chǎn)生移動(dòng),而只執(zhí)行L.length--;
此外,判定條件也可以合并:
?
轉(zhuǎn)載于:https://www.cnblogs.com/tinaluo/p/5240725.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: This function has no
- 下一篇: CDateTimeUI类源码分析