顺序结构存储的线性表操作【作业代码 1】

顺序结构存储的线性表操作

顺序结构存储的线性表是一种使用连续内存空间来存储元素的数据结构。在这种结构中,元素之间的相对位置通过物理存储位置直接反映出来,即元素在内存中的地址是连续的。下面,我们将基于您提供的代码片段,详细讨论顺序结构线性表的基本操作,包括初始化、查找、插入、删除以及区间删除。

1. 初始化(MakeEmpty
List MakeEmpty(){  
    List l;  
    l = (struct LNode*)malloc(sizeof(struct LNode));  
    l->Last=-1; // 初始化时,表为空,Last设为-1表示没有元素  
      
    // 注意:这里假设LNode结构体中至少包含Last(表示最后一个元素的索引)和Data(存储元素的数组)  
    // 但Data数组并未在MakeEmpty中初始化,通常需要在结构体定义时静态分配或动态分配  
    // 这里假设Data已经在LNode中定义,并且有足够的空间  
  
    return l;  
}
2. 查找(Find
Position Find(List L, ElementType X){  
    int i;  
    for (i = 0; i <= L->Last; i++)  
        if(L->Data[i]==X) return i; // 找到元素X,返回其位置  
    return ERROR; // 假设ERROR是一个定义好的错误码,表示未找到  
}
3. 插入(Insert
bool Insert(List L, ElementType X, Position P){  
    if (L->Last == MAXSIZE - 1) {  // 检查是否已满  
        printf("FULL");    
        return false;    
    }    
    if (P < 0 || P > L->Last + 1) {  // 检查插入位置是否合法  
        printf("ILLEGAL POSITION");    
        return false;    
    }   
    // 将P位置及之后的元素向后移动一位  
    for (int i = L->Last; i >= P; i--)  
        L->Data[i+1] = L->Data[i];  
    L->Data[P] = X; // 在P位置插入新元素  
    L->Last++; // 更新Last指针  
    return true;  
}
4. 删除(Delete,单个元素)
bool Delete(List L, Position P){    
    if (P < 0 || P > L->Last) {    
        printf("POSITION %d EMPTY", P);    
        return false;    
    }    
    // 将P位置之后的元素向前移动一位  
    for (int i = P+1; i <= L->Last; i++) {    
        L->Data[i-1] = L->Data[i];    
    }    
    L->Last--; // 更新Last指针  
    return true;  
}
5. 区间删除(Delete,多个元素)
List DeleteRange(List L, ElementType minD, ElementType maxD){  
    int count=0;  
    for(int i=0; i<=L->Last; i++){  
        if(L->Data[i] >= minD && L->Data[i] <= maxD) count++; // 统计需要删除的元素数量  
    }  
      
    // 从后向前遍历,避免覆盖未处理的元素  
    for(int i=L->Last; i>=0; i--){  
        if(L->Data[i] >= minD && L->Data[i] <= maxD){  
            // 向前移动元素,覆盖需要删除的元素  
            for(int j=i; j<L->Last-count; j++)  
                L->Data[j] = L->Data[j+1];  
            L->Last--; // 更新Last指针  
        }  
    }  
      
    // 注意:这里简化了处理逻辑,实际中可能需要更复杂的逻辑来确保效率  
    // 例如,可以先找到第一个和最后一个需要删除的元素的位置,然后一次性移动  
  
    return L; // 返回修改后的线性表  
}

注意:上述区间删除函数DeleteRange的实现为了简化理解,采用了较为直观但可能不是最高效的方法。在实际应用中,为了提高效率,可以考虑先找到第一个和最后一个需要删除的元素的位置,然后一次性移动剩余的元素。此外,原函数名Delete与单个元素删除函数冲突,这里改为DeleteRange以避免混淆。

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值