首页 > 其他分享 >线性表的定义与使用

线性表的定义与使用

时间:2024-11-01 22:50:43浏览次数:3  
标签:ps 储存 顺序 end 线性表 定义 使用 size

线性表(linear_list)是最常用且最简单的一种数据结构。间而言之,一个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至可以是其它复杂的信,常见的线性表:顺序表,链表,栈,队列,字符串。

线性表在逻辑上是线性结构,也就是说是一条连续的直线。但是在物理结构上并不一定是连续的,线性表在物理上储存时,通常以数组和链式结构的形式储存。

2.顺序表的实现

2.1概念及结构

顺序表是用一段物理地址连续的储存单元依次储存数据元素的线性结构,一般情况下采用数组储存。在数组上完成数据的增删查改。

顺序表一般可分为:

1.静态顺序表:使用定长数组储存。

2.动态顺序表:使用动态开辟的数组储存。

//顺序表的静态储存
#define N 100
typedef int SLDataType
typedef struct SqeList
{
 SLDataType arr[N];//定长数组
 size_t size;//有效数据的个数
}SqeList;
//顺序表的动态储存
#define N 100
typedef int SLDataType
typedef struct SqList
{
 SLDataType*arr;//指向动态开辟的数组
 size_t size;//有效数据的个数
 size_tcapicity;//空间容量的大小
}SqList;

3. 一般情况下我们使用动态顺序表对数据进行储存,因为动态可以改变表的空间大小,而静态表无法改变空间的大小所以对数据的储存比较麻烦。所以动态顺序表就要想内存申请开辟属于自己的空间。

//下面我们用malloc函数来开辟空间
struct*BuyListNode(LTDatatype x)//这里我们用结构体指针类型接收
{
 	struct*newnode = (struct*)malloc(sizeof(ListNode));
	assert(newnode);
	newnode->data = x;
	newnode->next = NULL;
	newnode->prev = NULL;
	return newnode;
}

4.完成表的创建以后我们就要对顺序表进行一系列的操作,即对顺序表的增,删,查,改,等基本操作。

(1)头插

void SeqListPushFront(SL*ps,SQDataType x)
{
 SeqListCheckCapacity(ps);
 int end=ps->size-1;
 while(end>=0)
 {
   ps->a[end-1]=ps->a[end];
   --end;
 }
 ps->a[0]=x;
 ps->size++;
}

(2)尾删

void SeqListPopBack(SL*ps)
{
 assert(ps->size>0)
 ps->size--;
}

(3)头删

void SeqListPopFront(SL*ps)
{
 assert(ps->size>0)
 int start=1;
 while(start<ps->size)
 {
  ps->a[start-1]=ps->a[start];
  ++start;
 }
 ps->size--;
}

(4)在pos位置前插入元素

void SeqListInser(SL*ps,int pos,SQDataType x)
{
 assert(po>ps->size)
 SeqListCheckCapacity(ps);
 int end=ps->size-1;
 while(end>=pos)
 {
  ps->a[end+1]=ps->a[end]
  --end;
 }
 ps->a[pos]=x;
 ps->size++;
}

 

标签:ps,储存,顺序,end,线性表,定义,使用,size
From: https://blog.csdn.net/2402_82496094/article/details/143441582

相关文章

  • Qml-Transition的使用
    Qml-Transition的使用Transition的概述Transition:定义了当状态发生改变时应用的动画属性animations:list:(Transition)过渡的动画属性enabled:bool:状态发生变化时,是否使能此过渡(Transition)动画;属性from:string:过渡的起始状态(State)名称,默认为"*"(任何状态)属性to:......
  • Qml-ShaderEffect的使用
    Qml-ShaderEffect的使用ShaderEffect的概述ShaderEffect使用自定义的顶点和片段着色器用于渲染一个矩形。用于在qml场景中添加阴影、模糊、着色和页面卷曲等效果。Qt5和Qt6中ShaderEffect有一定区别,在Qt6中由于支持不同的渲染API,ShaderEffect是用统一的qsb文件来满足对......
  • VMAF视频质量评估使用方法
    VMAF(VideoMultimethodAssessmentFusion)是一种基于机器学习的视频质量评估方法,它通过分析视频序列的多个质量特征来预测观众的主观质量感受。VMAF得分范围从0到100,其中100表示最高质量。以下是VMAF的使用方法和相关信息:VMAF使用方法FFmpeg集成:VMAF已被集成到FFmpeg中,作为一个......
  • lock 锁的使用场景
    publicclassProductService:IProductService{privatereadonlyobject_locker=newobject();privatereadonlyIMemoryCache_memoryCache;publicProductService(IMemoryCachememoryCache){_memoryCache=memoryCache;......
  • 如何使用GitHub上传文件
    使用GitHub上传文件的方法:1.创建GitHub仓库;2.使用GitHubDesktop上传文件;3.使用命令行上传文件;4.检查GitHub仓库。在开始之前,您需要一个GitHub账号。如果还没有账号,您可以在GitHub官方网站上注册一个。1.创建GitHub仓库在开始之前,您需要一个GitHub账号。如果还没有账号,您可以......
  • 三周精通FastAPI:27 使用使用SQLModel操作SQL (关系型) 数据库
    官网文档:https://fastapi.tiangolo.com/zh/tutorial/sql-databases/SQL(关系型)数据库¶FastAPI不需要你使用SQL(关系型)数据库。但是您可以使用任何您想要的关系型数据库。这里我们将看到一个使用SQLModel的示例。SQLModel是在SQLAlchemy和Pydantic的基础上构建的。它......
  • wordpress设置自定义字体
    wordpress设置自定义字体:失败的操作过程:写在最前:试了一天多的引用字体,方法包括但不限于:下载.ttf、.otf格式字体,转化为wotf、wotf2格式,挂在github仓库用CDN引用,得到css链接​ 然后这里填字体名称和CSS链接,试了很久很久,都失败了,不知道是不是字体本身转换的时候出错了。​......
  • 使用批处理,切换电源计划,切换自动休眠时间
    1、打开命令提示符:按Win+R,输入cmd,然后按Enter。2、列出电源计划的GUIDpowercfg/list获取输出结果取下:C:\Users\Administrator>powercfg/list现有电源使用方案(*Active)-----------------------------------电源方案GUID:381b4222-f694-41f0-****-ff5bb260df......
  • 使用 AutoTrain 进行图像分类
    使用AutoTrain进行图像分类https://huggingface.co/blog/autotrain-image-classification2022年9月28日发布GitHub上的更新尼玛·博斯卡里诺尼玛·博斯卡里诺所以,您已经听说了机器学习领域正在发生的所有酷事,并且想要加入其中。只有一个......
  • JWT在SpringBoot项目中的使用方法与优劣性
    JWT介绍JWT(JSONWebToken)是一种用于在网络应用环境中安全地传递信息的开放标准(RFC7519)。它是一种基于JSON的令牌格式,广泛用于身份验证和信息交换。JWT的结构JWT通常由三部分组成:头部(Header)、有效载荷(Payload)和签名(Signature)。这三部分通过.字符连接在一起,形成一......