初始化

  1. 定义
    顺序表特征是连续不断的,其中数组符合设计思想。因此struct中数据可设计成两种,分别是data数组和当前数据长度(数量)。
    初始化可通过使用typedef减少代码复杂度,代码如下:
    typedef struct {
        ElemType data[50];
        int len;
    }List;
    
  2. 初始化
    初始化前需要在main中声明,声明后可以通过main中调用函数实现初始化,调用的函数可如下设计:
    void IniList(List &L){
        L.data[0]=1;
        L.data[1]=2;
        L.data[2]=3;
        L.len=3;
    }
    

数据操作

  1. 添加数据
    顺序表中添加数据是在data数组尾部增加,增加后len长度加1,添加前应先判断len长度是否到了data数组最大值。代码如下:
    //MaxSize表示data数组的长度
    void InList(List &L,int i){
        if(L.len+1>MaxSize){
            printf("Insert failed");
        }
        else{
            L.data[L.len+1]=i;
            L.len++;
            printf("Insert succeed");
        }
    }
    
    其中如果不判断len长度直接添加,若超过了数组长度会造成访问越界。
    若在数组中间插入,则将插入位置及后面元素向后移动,再覆盖插入位置的元素以达到插入的效果。代码如下:
    //其中pos是插入位置,i是插入的数
    for(int k=L.len;k>pos-1;k--){
        L.data[k]=L.data[k-1];
    }
    L.data[pos-1]=i;
    L.len++;
    
  2. 删除数据
    删除前需要判断删除位置是否存在,删除即用删除位置后的所有元素往前覆盖达到删除的效果。代码如下:
    void DelList(List &L,int i){
        if(i>L.len||i<0){
            return false;
        }else{
            for(int k=i;k<L.len;k++){
                L.data[k-1]=L.data[k];
            }
            L.len--;
            return true;
        }
    }
    
  3. 查找数据
    可通过遍历对比查找数据,例下:
    void SeList(List L,int i){
        for(int k=0;k<L.len-1;k++){
            if(L.data[k]==i){
                printf("The position is %d",k+1);
            }
        }
    }