数据结构(其二)--线性表

1. 基本概念

线性表:

(1).其中的各个元素,数据类型相同

(2).元素之间,有次序

(3).都有表头元素表尾元素

(4).除了表头表尾,每个元素都可以找到一个直接前驱直接后继

2.线性表的基本操作

表的从无到有

InitList(&L):初始化一个线性表

DestroyList(&L):销毁

ListInsert(&L, i, e):插入,在表L的第 i 处插入元素 e

ListDelete(&L, i, &e):删除,将表L的第 i 处元素删除,并用 e 返回该被删除的元素

LocateElem(L, e):按查找,在表中查找特定关键字e 的元素

GetElem(L, i):按查找,获取表中第 i 个元素的值

其他常规操作:

Length(L):求表长

PrintList(L):输出表的所有元素

Empty(L):判断表是否为空,返回true or false

高度概括,即为,创销与增删改查

3.顺序表

顺序存储方式储存数据的线性表

(1).静态分配

#define MAX 10
//顺序表(静态分配)
class SqList
{
public:int data[MAX];int length;
};
//初始化
void InitList(SqList &l)
{for(int i = 0 ;i < 10 ;i++){l.data[i] = 0;}l.length = 0;
}
//打印所有元素
void PrintList(SqList &l)
{for (int i = 0; i < 10; i++)cout << "第" << i << "个数:" << l.data[i] << endl;
}//测验
void test01()
{SqList l;InitList(l);PrintList(l);
}

(2).动态分配

#define InitSize 10
//顺序表(动态分配)
class SqList
{
public:int* data;		//指示动态分配数组的指针int MaxSize;	//指示最大容量int length;		//指示当前长度
};
//初始化顺序表
void InitList(SqList& l)
{l.data = new int[InitSize];l.MaxSize = InitSize;l.length = 0;for (int i = 0; i < l.MaxSize; i++){l.data[i] = 0;}
}
//增长数组空间
void IncreaseSize(SqList& l, int len)
{int* p = l.data;					//暂存原数组中的数据l.data = new int[10 + len];			//扩展新的数组for (int i = 0; i < l.length; i++)	//将原数据拷贝进新数组中{l.data[i] = p[i];}l.MaxSize = InitSize + len;			//修改数组的状态数据delete p;							//将p释放
}
//打印所有元素
void PrintList(SqList& l)
{for (int i = 0; i < 10; i++)cout << "第" << i << "个数:" << l.data[i] << endl;
}void test01()
{SqList l;InitList(l);PrintList(l);
}

(3).顺序表的插入(以静态分配为例)(示例代码中包含了一下必要的基本函数)

bool ListInsert(SqList& l, int d, int e)
{
    if (l.length >= MAX)                        //首先要判断表是否已满、插入是否合法
    {
        cout << "插入失败,已达上限" << endl;
        return false;
    }
        
    if (d < 1 || d > l.length + 1)
    {
        cout << "插入失败,无直接前驱" << endl;
        return false;
    }
    for (int j = l.length; j >= d; j--)         //将插入点之后的元素后移
        l.data[j] = l.data[j - 1];
    l.data[d - 1] = e;                          //插入,因为d指的是第几个数,在数组的换算中要减一
    l.length++;
    return true;
}

示例代码

#define MAX 10
//顺序表(静态分配)
class SqList
{
public:int data[MAX];int length;
};
//初始化
void InitList(SqList& l)
{for (int i = 0; i < 10; i++){l.data[i] = 0;}l.length = 0;
}
//打印所有元素
void PrintList(SqList& l)
{for (int i = 0; i < 10; i++)cout << "第" << i << "个数:" << l.data[i] << endl;
}
//存入数据
void InputElem(SqList& l, int e)
{int i = 0;while (i < MAX){if (l.data[i] == 0){l.data[i] = e;l.length++;break;}i++;}
}
//获取顺序表长度
int GetLength(SqList l)
{//cout << l.length << endl;return l.length;
}
//插入
bool ListInsert(SqList& l, int d, int e)
{if (l.length >= MAX)                        //首先要判断表是否已满、插入是否合法{cout << "插入失败,已达上限" << endl;return false;}if (d < 1 || d > l.length + 1){cout << "插入失败,无直接前驱" << endl;return false;}for (int j = l.length; j >= d; j--)         //将插入点之后的元素后移l.data[j] = l.data[j - 1];l.data[d - 1] = e;                          //插入,因为d指的是第几个数,在数组的换算中要减一l.length++;return true;
}
//查看情况
void CheckList(SqList& l)
{PrintList(l);cout << "当前长度为" << GetLength(l) << endl;
}//测验
void test01()
{SqList l;InitList(l);//输入部分数据InputElem(l, 1);InputElem(l, 2);InputElem(l, 3);InputElem(l, 4);CheckList(l);//开始插入if(ListInsert(l, 5, 6))CheckList(l);
}

 (4).顺序表的删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城学习笔记-16-人人开源搭建后台管理系统

文章目录 一&#xff0c;克隆前/后端代码1&#xff0c;克隆前端工程renren-fast-value2&#xff0c;克隆后端工程renren-fast 二&#xff0c;集成后台管理系统的后端代码三&#xff0c;启动后台管理系统四&#xff0c;前端系统的安装和运行1&#xff0c;下载安装VSCode2&#x…

为什么KV Cache只需缓存K矩阵和V矩阵,无需缓存Q矩阵?

大家都知道大模型是通过语言序列预测下一个词的概率。假定{ x 1 x_1 x1​&#xff0c; x 2 x_2 x2​&#xff0c; x 3 x_3 x3​&#xff0c;…&#xff0c; x n − 1 x_{n-1} xn−1​}为已知序列&#xff0c;其中 x 1 x_1 x1​&#xff0c; x 2 x_2 x2​&#xff0c; x 3 x_3 x…

拓展中国剩余定理

题目链接 代码&#xff1a; /*扩展中国剩余定理的使用范围更广泛&#xff0c;不要求模数全部互质扩展中国剩余定理&#xff1a;两两合并同余方程&#xff0c;合并 n - 1 次之后&#xff0c;就能求解合并两个同余方程&#xff1a;x ≡ r1 (mod p1) --- x a*p1 r1x ≡ r2 (mo…

from transformers.modeling_utils import PreTrainedModel

from transformers.modeling_utils import PreTrainedModel 是用于导入 Hugging Face Transformers 库中的 PreTrainedModel 类。这个类是所有预训练模型的基类&#xff0c;提供了许多通用功能和方法&#xff0c;适用于不同类型的模型&#xff08;如BERT、GPT、Transformer-XL等…

STM32对数码管显示的控制

1、在项目开发过程中会遇到STM32控制的数码管显示应用&#xff0c;这里以四位共阴极数码管显示控制为例讲解&#xff1b;这里采用的控制芯片为STM32F103RCT6。 2、首先要确定数码管的段选的8个引脚连接的单片机的引脚是哪8个&#xff0c;然后确认位选的4个引脚连接的单片机的4…

ChatGPT:fetch/xhr是什么意思

ChatGPT&#xff1a;fetch/xhr是什么意思 fetch 和 XHR&#xff08;XMLHttpRequest&#xff09;是两种用于在客户端与服务器之间进行异步通信的方法。在网页开发中&#xff0c;它们用于从服务器获取数据或将数据发送到服务器&#xff0c;而不需要刷新整个页面。 fetch fetch …

平滑切换/过渡多个控制器的方法

控制系统理论 在控制系统领域&#xff0c;平滑切换多个控制器通常指的是在保持系统稳定性和性能的同时&#xff0c;实现控制器之间的无缝切换。 输出抖动抑制方法&#xff1a;通过设计包含积分作用的控制器实现跟踪控制&#xff0c;并通过设计补偿器来减小控制输入信号在切换…

京东技术团队撰写的整整986页《漫画学Python》到底有什么魅力?

这是一本Python入门书。无论您是想学习编程的小学生&#xff0c;还是想参加计算机竞赛的中学生&#xff0c;抑或是计算机相关专业的大学生&#xff0c;甚至是正在从事软件开发的职场人&#xff0c;本书都适合您阅读和学习。但您若想更深入地学习Python并进行深层次应用&#xf…

第一个vue——01

指定vue实例的挂载位置 <div id ‘app’> </div> 一、创建vue实例 1.为什么要 new vue() ,直接调用vue&#xff08;&#xff09;函数可以吗&#xff1f; No&#xff0c; 因为直接调用vue()函数&#xff0c;不创建实例的话&#xff0c;会出现以下错误&#xff1…

通过 Parallels Desktop 虚拟机安装运行 macOS 15 Sequoia

在 Apple 的 WWDC 24 大会上&#xff0c;macOS Sequoia 15 成为全场热议的焦点。 作为科技爱好者和开发者&#xff0c;我们都迫不及待想要体验这些最新功能。但如果直接把整个 Mac 升级到测试版&#xff0c;可能不太现实&#xff0c;特别是当你需要保持主系统稳定的时候。 幸…

单例模式之饿汉式

文章目录 单例模式&#xff08;饿汉式&#xff09;代码静态变量创建实例代码静态代码块创建实例 单例模式&#xff08;饿汉式&#xff09; 单例模式是一种创建性的设计模式&#xff0c;主要是保证一个类只能有一个实例。全局中保证一个实例的使用。 单例模式饿汉式主要的构成…

数据库常见问题(持续更新)

数据库常见问题(持续更新) 1、数据库范式&#xff1f; 1NF&#xff1a;不可分割2NF&#xff1a;没有非主属性对候选码存在部分依赖3NF&#xff1a;没有非主属性传递依赖候选码BCNF&#xff1a;消除了主属性对对候选码的传递依赖或部分依赖 2、InnoDB事务的实现&#xff1f; …

大数据平台建设概要

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 欢迎关注微信公众号&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

Oracle 19c RAC 心跳异常处理

客户机房异常断电后&#xff0c;启动19c集群报错如下 2024-07-05 17:43:27.934 [GIPCD(5964292)]CRS-42216: No interfaces are configured on the local node for interface definition en3(:.*)?:100.100.100.0: available interface definitions are [en0(:.*)?:10.88.0.…

Unity--射线检测--RayCast

Unity–射线检测–RayCast 1.射线检测的含义 射线检测,根据名称而言,使用一条射线来检测是击中了某个物体/多个物体 射线检测的包含两个部分: 射线和检测 2.射线检测可以用在哪些地方 射击游戏&#xff1a; 玩家的瞄准和射击&#xff1a;检测玩家视线是否与敌人或其他目标…

阶段三:项目开发---大数据开发运行环境搭建:任务5:安装配置Kafka

任务描述 知识点&#xff1a;安装配置Kafka 重 点&#xff1a; 安装配置Kafka 难 点&#xff1a;无 内 容&#xff1a; Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;…

GEE代码实例教程详解:地表温度长时间序列分析

简介 在本篇博客中&#xff0c;我们将使用Google Earth Engine (GEE) 对地表温度 (LST) 进行长时间序列分析。通过结合Landsat 4-9的数据&#xff0c;我们将探索1982年至2024年间地表温度的变化趋势。 背景知识 Landsat数据集 Landsat数据集提供了多时相、多光谱的地表观测…

用起来超爽的4个宝藏软件工具

记得带 “记得带”是一款专为繁忙的都市人设计的生活服务软件&#xff0c;旨在帮助用户轻松管理日常生活中的各种事务。该应用程序集成了多种实用功能&#xff0c;包括购物清单、待办事项、日程安排和健康追踪等。它还具有智能提醒功能&#xff0c;可以根据用户的日常习惯和偏好…

14-41 剑和诗人15 - RLAIF 大模型语言强化培训

​​​​​​ 介绍 大型语言模型 (LLM) 在自然语言理解和生成方面表现出了巨大的能力。然而&#xff0c;这些模型仍然存在严重的缺陷&#xff0c;例如输出不可靠、推理能力有限以及缺乏一致的个性或价值观一致性。 为了解决这些限制&#xff0c;研究人员采用了一种名为“人工…