首页 > 其他分享 >顺序结构存储的线性表操作【作业代码 1】

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

时间:2024-09-02 22:20:56浏览次数:4  
标签:存储 顺序 Last 线性表 int 元素 List return Data

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

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

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以避免混淆。

标签:存储,顺序,Last,线性表,int,元素,List,return,Data
From: https://blog.csdn.net/delepaste/article/details/141831978

相关文章

  • 深入理解Spring Cloud Consul的KV存储与配置中心功能
    深入理解SpringCloudConsul的KV存储与配置中心功能SpringCloudConsul是SpringCloud生态系统中的一个重要组件,用于微服务注册、发现和配置管理。它基于Consul的功能,提供了一种轻量级的服务注册与发现的解决方案,并且支持键值(KV)存储,这使得它可以作为配置中心来管理......
  • 使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个
    实现顺序表的判空,判满,添加数据,求实际长度,任意位置的插入/删除,访问数组中的任意一个元素,以及让顺序表自动扩容。首先需要实现一个顺序表需要使用结构体构造其基本组成部分,以及基本函数接口,采用内部声明外部定义的方式。//使用C++手动封装一个顺序表,包含成员数组一个,成员变量N......
  • 线性表之队列API设计思路
    Java学习手册+面试指南:https://javaxiaobear.cn队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来。1、队列的API设计类名Queue构造方法Queue():创建Queue对象成......
  • Kubernetes存储卷
    1.存储卷基础1.1存储卷基础从概念上讲,存储卷是可供Pod中的所有容器访问的目录Pod规范中声明的存储卷来源决定了目录的创建方式、使用的存储介质以及目录的初始内容存储卷插件(存储驱动)决定了支持的后端存储介质或存储服务,例如hostPath插件使用宿主机文件系统,而nfs插件则对......
  • 线性表:顺序表的实现以及遍历扩容
    Java学习手册+面试指南:https://javaxiaobear.cn顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来......
  • 云端储存:亚马逊云Amazon S3(对象存储)
    前言同样是废话不多说,开头就直接上体验链接亚马逊云科技,包括灵活的AmazonEC2云服务器、稳定的AmazonRDS数据库服务、可扩展的AmazonS3云存储空间等等常见云服务产品。部署博客网站却不想买服务器......
  • 信息学奥赛初赛天天练-82-NOIP2014普及组-完善程序-机器语言、汇编语言、高级语言、计
    1NOIP2014普及组基础题11以下哪个是面向对象的高级语言()A汇编语言BC++CFortranDBasic2TB代表的字节数是()A2的10次方B2的20次方C2的30次方D2的40次方3二进制数00100100和00010101的和是()A00101000B001010......
  • 【C语言】顺序表详解,灵活运用所学知识
    文章目录前言1.什么是顺序表?1.1线性表2.编写你的顺序表!2.0赛前准备2.1初始化2.2容量检查2.3打印顺序表2.4尾插和尾删2.5头插和头删2.6插入和删除2.7查找和更改3.菜单一些err总结前言顺序表是我们学习数据结构第一阶段的必经之路什么是顺序表,且听我慢慢道来本篇博客用到的......
  • 【C语言】数据结构-栈(顺序表实现)
    文章目录前言1.什么是栈2.栈的实现3.敲代码!3.1头文件3.2函数实现4.知识巩固,来道OJ!结语前言在之前的数据结构学习中,我们学习了顺序表、链表这两种结构顺序表:博客链接1单链表:博客链接2链表OJ:博客链接3除了单链表以外,还有一个结构,是双向带头循环链表。这个链表的形式如下头节点的......
  • 达梦存储过程性能问题定位
    在达梦数据库中可以通过V$DMSQL_EXEC_TIME和debug方式来定位存储过程存在的性能问题,但V$DMSQL_EXEC_TIME往往定位比较粗糙,没法定位到存储过程中sql的执行时间,而debug可以点位具体某段sql,但如果存储过程里面有大量游标,参数变量值很多的情况下,debug调试也花费大量时间,下面介绍使用日......