【数据结构day1】顺序表的基本操作

关于这部分其实操作都很简单且基础,我认为需要注意的有以下几个点:

  1. 插入和删除的循环怎么写?插入的时候是尾部有空位,所以先从尾部开始进行移动;删除则相反,是从删除元素的位置开始前移。
  2. 关于边界的条件:需要注意的是数组的下标==插入的p变量;而length是数据数量,注意区分length和maxsize,length才决定了当前顺序表的元素数量,因此在进行元素插入的时需要进行元素后移,而此时最后一个元素是被移出了顺序表的,因此不会被记录下来
    我这样理解似乎有点不正确,但是具体又不知道错在哪里了,可以交流一下。

结构体顺序表结构体定义

typedef struct{
    
    
    int data[MaxSize];//存放数据的数组
    int length;//顺序表的长度,经过insertElem函数和deleteElem函数之后会改变
}SqList;

创建顺序表

void initList(SqList &L){
    
    
    for(int i=0;i<MaxSize;i++){
    
    //顺序表结构初始化,注意边界情况这里i最大为MaxSize-1
        L.data[i]=0;
    }//
    L.length=0;//一开始顺序表里面没有内容,所以初始化为0
}

查询指定元素(按值查询)

int findElem(SqList L,int e){
    
    
    int i;
    for(i=0;i<L.length;i++) {
    
    //边界情况,数组是从0开始的
        if (e == L.data[i])
            return i;
    }
        return -1;

}

插入元素

int insertElem(SqList &L,int p,int e){
    
    //这里记得加上取地址符号,因为需要改变L中内容
    if(p<0||p>L.length||L.length>=MaxSize)//考虑不成立情况,注意length,分清楚p是下标,length是数据数量
        return 0;
    for(int i=L.length-1;i>=p;i--){
    
    //边界情况考虑到,i从数组倒数第二个开始进行后移
        L.data[i+1]=L.data[i];
    }
    L.data[p]=e;
    ++(L.length);
    return 1;
}

删除元素

int deleteElem(SqList &L,int p,int e){
    
    
    if(p<0||p>L.length){
    
    
        return -1;
    }
//    e=L.data[p];
    for(int i=p;i<=L.length-1;i++){
    
    
        L.data[i]=L.data[i+1];
    }
    --(L.length);
    return 1;
}

猜你喜欢

转载自blog.csdn.net/qq_51763547/article/details/132099789