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

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.mfbz.cn/a/784446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

逻辑回归中的损失函数

一、损失函数介绍&#xff1a; 与回归问题成本函数不同的是&#xff0c;逻辑回归模型&#xff08;解决分类问题&#xff09;的成本函数在获得损失J的时候不再用真实值y与预测值y^的差值计算损失&#xff0c;真实值y不再出现在公式中作为计算项。 首先&#xff0c;该次训练损失…

Gradle基础:从入门到掌握

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 在现代软件开发中&#xff0c;自动化构建工具是提高效率和管理依赖的重要手段。而Gradle作为一种灵活且强大的构…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率&#xff0c;以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样&#xff0c;常见的一种计算方式是金融监管支出与金…

linux指令练习

二、touch、vi练习&#xff1a; 1、在root家目录下创建目录A1和B1 2、进入B1下同时创建三个文件m1, m2 , n1&#xff0c;单独创建目录N1 3、进入到A1目录中分别创建一个文件t1,k2&#xff0c;同时创建目录F1&#xff0c;F2 4、删除B1下的所有1结尾的文件或者目录 5、删除A1目录…

容易涨粉的视频素材在哪找啊?爆款涨粉的视频素材网站有这几个

亲爱的读者&#xff0c;大家好&#xff01;今天我们要探讨一个至关重要的问题&#xff1a;在充满竞争的视觉时代&#xff0c;如何使自己的短视频脱颖而出并吸引更多粉丝&#xff1f;关键在于使用那些既酷炫又高质量的视频素材&#xff01;下面就向大家推荐几个顶级视频素材网站…

【分布式系统】Filebeat+Kafka+ELK 的服务部署

目录 一.实验准备 二.配置部署 Filebeat 三.配置Logstash 四.验证 一.实验准备 结合之前的博客中的实验 主机名ip地址主要软件es01192.168.80.101ElasticSearches02192.168.80.102ElasticSearches03192.168.80.103ElasticSearch、Kibananginx01192.168.80.104nginx、Logs…

vue对axios进行请求响应封装

一、原因 像是在一些业务逻辑上&#xff0c;比如需要在请求之前展示loading效果&#xff0c;或者在登录的时候判断身份信息&#xff08;token&#xff09;等信息有没有过期&#xff0c;再者根据服务器响应回来的code码进行相应的提示信息。等等在请求之前&#xff0c;之后做的一…

前端面试题23(css3)

关于CSS3的面试题&#xff0c;我们可以从多个维度来探讨&#xff0c;包括但不限于选择器、盒模型、布局技术、动画与过渡、响应式设计等。下面我会列举一些典型的CSS3面试问题&#xff0c;并尽可能提供详细的解答或示例代码。 1. CSS3中新增了哪些选择器&#xff1f; 答案: C…

Spring Boot集成rmi快速入门demo

1.什么是rmi&#xff1f; RMI&#xff08;Remote Method Invocation&#xff09;即远程方法调用&#xff0c;是分布式编程中的一个基本思想。实现远程方法调用的技术有很多&#xff0c;比如CORBA、WebService&#xff0c;这两种都是独立于各个编程语言的。 而Java RMI是专为Ja…

DNF手游攻略:云手机辅助刷副本!内置辅助工具!

DNF手游是一款备受玩家喜爱的角色扮演类游戏&#xff0c;以其独特的地下城探险和多样化的装备系统而闻名。玩家需要通过不断的挑战和升级&#xff0c;逐步增强自己的角色实力&#xff0c;最终完成各种高难度的副本任务。游戏的核心玩法包括打怪、刷装备、升级技能等。 游戏辅助…

python特征相关性可视化分析 - sns.pairplot

seaborn 是一个基于 matplotlib 的 Python 数据可视化库&#xff0c;提供了更高层次的接口来绘制有吸引力的统计图形。pairplot 是 seaborn 中的一个函数&#xff0c;用于绘制数据集中多个变量之间的成对关系图。 基本用法 pairplot 函数可以快速地对数据集中的所有数值变量进…

如何优化 PostgreSQL 中对于树形结构数据的查询?

文章目录 一、数据模型选择&#xff08;一&#xff09;邻接表模型&#xff08;二&#xff09;路径枚举模型&#xff08;三&#xff09;嵌套集模型 二、索引策略&#xff08;一&#xff09;对于邻接表模型&#xff08;二&#xff09;对于路径枚举模型&#xff08;三&#xff09;…

信息技术课堂纪律管理:从混乱到秩序的智慧转型

引言&#xff1a; 在信息爆炸的时代&#xff0c;信息技术课程如同一把开启未来世界大门的钥匙&#xff0c;为学生们搭建起探索科技奥秘的桥梁。然而&#xff0c;面对着屏幕背后的无限诱惑&#xff0c;维持课堂纪律&#xff0c;确保学生们专注于学习&#xff0c;成为了每位信息…

[C++]入门基础(1)

Hello大家好&#xff0c;今天通过本篇文章&#xff0c;我们来初步学习C&#xff0c;C可以说是对C语言的一个升级&#xff0c;我们会一步一步的由浅入深的学习C。 目录 1.第一个C程序 2.命名空间 2.1 命名空间出现的意义 2.2 namespace的定义 2.3 命名空间的使用 3.C输入…

【Java系列】深入解析 Lambda表达式

简化这个代码 这个就是Lambda表达式,可以简化匿名内部类的写法 package lambda;public class demo2 {public static void main(String[] args) {//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象--接口多态// 但是这个实现类,我只要用一次,所以我…

C++基础(十二):string类

这一篇博客&#xff0c;我们正式进入STL中的容器的字符串类的学习&#xff0c;C标准模板库&#xff08;STL&#xff09;中的std::string类是一个用于表示和操作字符串的类。它封装了动态分配的字符数组&#xff0c;提供了丰富的成员函数来进行字符串的操作&#xff0c;例如拼接…

身边的故事(十五):阿文的故事:再消失

物镜人非&#xff0c;沧海桑田。像我们这些普通的凡人&#xff0c;哪有什么试错的机会&#xff0c;每走一步都是如履薄冰&#xff0c;小心谨慎&#xff0c;错一步可能就会万劫不复。唉&#xff0c;如果...唉...哪有什么如果... 阿文的房子很快装修完成&#xff0c;入新房那天就…

世界商用飞机机型大全-使用Java抓取FlightAware后的答案

目录 前言 一、数据说明 1、实时航班飞机机型数据 2、网页结构分析 二、使用Java进行信息抓取 1、定义页面PageVO对象 2、爬取属性定义 3、启动信息抓取组件 三、成果分析 1、商业飞行的飞机机型的种类 2、飞机种类排名前十名 3、航班数排名后十名 4、看中国国产大飞…

Typora篇-忍痛开启

语雀专业会员即将到期, 我看着99元的学费款, 我决定重新用回Typora。 虽然里面有一些文件但是我还是舍不得ಥ_ಥ 99元巨款。 下面开启我的Typora整活历程&#xff0c; 大家有什么好用的插件快捷方式一起来分享啊。

Profibus转Modbus模块连SmartPLC接汇川630伺服案例

一、环境&#xff1a;Modbus转Profibus模块&#xff08;XD-MDPB100)是一种通讯协议转换器&#xff0c;能够实现Modbus 协议与Profibus-DP协议的信息共享。汇川630伺服作为一种先进的运动控制设备&#xff0c;其平稳性和准确性获得了充分肯定。本文将详细分析怎么使用Profibus转…