//天勤p28例2-2:删除顺序表L中下标为p的元素,成功返回1,否则返回0,并将被删除元素的值赋给e
//首先要找到p,然后将p后的元素都前移一位,长度-1就可以了
//先写查函数findElem,找到返回位置,找不到返回-1
#include "stdio.h"
#define MAXSIZE 100
typedef struct{
int data[MAXSIZE];
int length;
}List;
void init(List &Li){
int size = 20;
for(int i=0;i<size;i++){
Li.data[i]=i;
}
Li.length = size;
}
int findElem(List &Li,int n){ //查找函数。若不用修改结构体内的内容,可以直接传结构体过去(List Li)让它在函数里生成一个一样的(其实最好的做法是无论何时都传(地址)指针。因为节省空间)
for(int i=0;i<Li.length;i++){
if (Li.data[i] == n){
return i; //找到
}
}
return -1; //找不到
}
int deleteElem(List &Li,int n,int &e){
int local = findElem(Li,n);
if(local == -1){
e = n; //赋给e
return 0; //找不到,返回0
}
for(int i=local;i<Li.length-1;i++){
Li.data[i] = Li.data[i+1]; //元素前移
}
Li.length = Li.length - 1;
return 1; //成功,返回1
}
int main(){
List L;
int e;
int n = 22;
init(L);
int d = deleteElem(L,n,e);
// for(int i=0;i<L.length;i++){ //测试输出
// printf("%d ",L.data[i]);
// }
printf("%d ",d);
// printf("%d",e); //测试输出
getchar();
return 0;
}
//原序列:0~19
//删除 n=3 后序列12456~19,返回1
//删除 n=22 后序列不变,返回0
//delete是保留字?换了delete就正常了