首页 > 其他分享 >线性表的顺序存储结构

线性表的顺序存储结构

时间:2023-06-01 19:11:55浏览次数:26  
标签:线性表 元素 插入 length data 顺序存储 结构

线性表的顺序存储结构

标签(空格分隔): DS 线性表 顺序存储


1.线性表的顺序存储结构

#define MAXSIZE 20//数组最大长度
typedef struct
{
ElemeType data[MAXSIZE];//数组顺序存储元素,data即为存储空间的起始位置
int length;//线性表当前长度:表中元素的个数length<=MAXSIZE
}SqList,*SqList;

2.获得第i个元素操作

注意:	
1.出错判断
    1.1线性表是否空表
    1.2.i是否合法,合法的i应在[1,length],若不合法,即i<1||i>length
2.线性表如果有第i个元素,用指针e返回data[i-1].
Status GetElem(SqList L, int i, ElemType *e)
{
    //出错判断
    If(L.length==0||i<1||i>L.length)
    return ERROR;
    //没有错误,用指针e返回第i个元素
    *e=L.data[i-1];
    return OK;
}

3.插入第i个元素

插入算法的思路:
1.判断错误
    1.1判断线性表是否已满,还能否插入,若已满,则不能插入;
    1.2判断i是否合法,合法应在[1,length+1],即可以在第i个位置插入;不合法为i<1||i>length+1
2.插入元素
    2.1若插入位置不在表尾,即i!=length+1,则从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
    2.2将要插入的元素e填入位置i处;
    2.3表长加1。
Status ListInsert(SqList *L, int i, Elemtype e)
{
//判断错误
If(L->length==MAXSIZE)
return ERROR;
If(i<1||i>L->length+1)
Return ERROR;

//插入元素
if(i<=L->length)//或者i!=L->length+1
{
    Int k;//k为数组下标
    for(k=L->length-1;k>=i-1;k--)
         L->data[k+1]=L->data[k];
}
L->data[i-1]=e;
L->length++;
return OK;
}

4.删除第i个元素

思路:
1.判断错误
    1.1线性表若为空,则无元素可删
    1.2删除的位置不正确,正确的位置i为[1,length],即可以删除第1到第length(最后)个元素,不正确的i为i<1||i>length
2.删除元素
    2.1用指针e存储返回被删除的元素
    2.2若删除的元素不在最后一个,即i!=length,则从元素位置到最后一个元素前移
    2.3表长减一
Status ListDelete(SqList *L, int i,ElemType *e)
{
    //判断错误
    if(L->length==0||i<1||i>L->length)
        return ERROR;
    
    //删除元素
    *e=L->data[i-1];
    if(i!=L->length)//或者i<L->length
    {
        int k;//数组下标
        for(k=i;k<L->length;k++)
            L->data[k-1]=L->data[k];
    }
    L->length--;
    return OK;
}

标签:线性表,元素,插入,length,data,顺序存储,结构
From: https://www.cnblogs.com/wa2211lq/p/17449955.html

相关文章

  • 线性表的链式存储结构
    线性表的链式存储结构标签(空格分隔):DS线性表链式存储1.线性表的单链表存储结构typedefstructNode{ElemTypedata;//数据域structNode*next;//指针域}Node,*pNode;//节点,节点指针typedefstructNode*LinkList;//头指针指向头节点2.单链表的读取第i个元......
  • c语言结构体
    定义结构体变量structStudent{char*name;intage;intscore;};voidmain(){structStudentst1;system("pause");}#include<stdlib.h>#include<string.h>#include<stdio.h>typedefstructStudent{char*nam......
  • 常用的表格检测识别方法——表格结构识别方法 (下)
    常用的表格检测识别方法——表格结构识别方法(下)3.2表格结构识别方法 表格结构识别是表格区域检测之后的任务,其目标是识别出表格的布局结构、层次结构等,将表格视觉信息转换成可重建表格的结构描述信息。这些表格结构描述信息包括:单元格的具体位置、单元格之间的关系、单元格的行......
  • GoWeb项目目录结构参考
    GoWeb项目目录结构目录结构main.gogo.modgo.summodel 数据库操作,增删改查,固化的通用接口view 视图文件controller 通讯请求,API操作等内容等业务逻辑router middleware 中间件部分可以放置在根目录,也可以放置在router内.gin项目一般放置在router目录内confi......
  • Python字典:强大的键值对数据结构
    在Python中,字典是一种多功能和强大的数据结构,它允许我们以键值对的形式存储和操作数据。字典在其他编程语言中也被称为关联数组或哈希映射,它提供了一种高效的方式来根据键检索和更新值。在本文中,我们将探讨Python中的字典概念,并了解如何有效地使用它们。Python中的字典是无序的键......
  • JS 树型结构 模糊搜索 匹配到所有的节点,包括所有的父节点
    treeData就是el-tree:data要绑定的数据 :data=treeData treeOptions.data是接口返回的原始树形结构数据//根据关键字过滤后的数据consttreeData=computed(()=>{  if(!options.searchText)returntreeOptions.data;  letmhres=filterNodeMethod(opti......
  • TCP/IP 协议体系结构模型
    TCP/IP协议体系结构模型OSI模型通过一系列协议描述了理想的网络通信。TCP/IP并不直接对应于此模型。TCP/IP或者将几个OSI层组合为一个层,或者根本不使用某些层。下表显示了OracleSolaris:实现的TCP/IP层。该表列出了从最顶层(应用层)到最底层(物理网络层)的各层。表 1–2TC......
  • Go数据结构
    Go-数据结构参考整理:1.链表:深入理解container/list&LRU缓存的实现-Mohuishou(lailin.xyz)(提醒:马上要离校,最近在整理本地电脑的笔记,很多东西可能写的有些久,忘记参考链接是否全,若是文章有所问题,请及时评论。)1、链表:深入理解container/list和LRU缓存的实现序Go数据......
  • 以太网帧结构
    structethhdr{unsignedcharh_dest[ETH_ALEN];/*destinationethaddr*/unsignedcharh_source[ETH_ALEN];/*sourceetheraddr*/__be16h_proto;/*packettypeIDfield*/}__attribute__((packed));/*协议ID,即h_proto可使用......
  • 初级数据结构--单链表
    继昨天终于明白了成功截图typedefstructLNode{ intdata; structLNode*next;}LNode;boolIsitList(LNode**Head){ *Head=(LNode*)malloc(sizeof(LNode)); if(!*Head) returnfalse; (*Head)->next=NULL; returntrue;}voidListInsert(LNode*L,intval......