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