数据结构考研--线性表例2-2

//天勤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就正常了
原文地址:https://www.cnblogs.com/BreezeFeng/p/13946475.html