【数据结构笔记】线性表(代码)

文章目录

  • 顺序表
    • 基本操作
    • InitList(&L)
      • 静态分配
      • 动态分配
        • c
        • c++
    • 基本操作实现

顺序表

基本操作

InitList(&L)
Length(L);
LocateElem(L, e);
GetElem(L, i);
ListInsert(&L, i, e);
ListDelete(&L, i, &e);
PrintList(L);
Empty(L);
DestroyList(&L);

InitList(&L)

静态分配

#include <iostream>
using namespace std;// 定义最大长度
#define MaxSize 10// typedef 为结构体类型定义一个别名。
typedef struct {int data[MaxSize];	int length; 		// 顺序表的当前长度
} SqList;// 初始化
void InitList(SqList &L) {L.length = 0;
}

动态分配

c
#include <iostream>
using namespace std;// 默认最大长度
#define InitSize 10// typedef 为结构体类型定义一个别名。
typedef struct {int *data;			// 指示动态分配数组的指针int MaxSize;		// 顺序表的最大容量int length; 		// 顺序表的当前长度
} SeqList;// c malloc
void InitList(SeqList &L) {L.data = (int *) malloc(InitSize * sizeof(int));L.length = 0;L.MaxSize = InitSize;
}// c
// len 为增加的长度,不是变成len
void IncreaseSize(SeqList &L, int len) {int *p = L.data;L.data = (int *) malloc((L.MaxSize + len) * sizeof(int));for (int i = 0; i < L.length; ++i) {L.data[i] = p[i];}L.MaxSize += len;free(p);
}// c free
void DestroyList(SeqList &L) {free(L.data);L.length = 0;L.MaxSize = 0;
}
c++
// c++ new
void InitList(SeqList &L) {L.data = new int[InitSize];L.length = 0;L.MaxSize = InitSize;
}// c++ delete
void DestroyList(SeqList &L) {delete[] L.data;L.length = 0;L.MaxSize = 0;
}// c++
void IncreaseSize(SeqList &L, int len) {int *p = L.data;L.data = new int[L.MaxSize + len];for (int i = 0; i < L.length; ++i) {L.data[i] = p[i];}L.MaxSize += len;delete[] p;
}

基本操作实现

#include <iostream>
using namespace std;// 定义最大长度
#define MaxSize 10// typedef 为结构体类型定义一个别名。
typedef struct {int data[MaxSize];	int length; 		// 顺序表的当前长度
} SqList;// 初始化
void InitList(SqList &L) {L.length = 0;
}/** * @brief 顺序表插入* @param SqList & L	顺序表* @param int i			元素位序* @param int e			插入元素值* @return 返回说明*     -<em>false</em> 插入成功*     -<em>true</em> 插入失败*/
bool ListInsert(SqList &L, int i, int e) {if (i < 1 || i > L.length + 1) {	// 判断i的范围是否有效return false;}if (L.length >= MaxSize) {			// 判断存储空间是否已满return false;}for (int j = L.length; j >= i; --j) {	//将第i个及之后的元素后移L.data[j] = L.data[j-1];}L.data[i-1] = e;++L.length;return true;
}/** * @brief 顺序表删除* @param SqList & L	顺序表* @param int i			元素位序* @param int e			删除元素值* @return 返回说明*     -<em>false</em> 删除失败*     -<em>true</em> 删除成功*/
bool ListDelete(SqList &L, int i, int &e) {if (i < 1 || i > L.length) {	//判断i的范围是否有效 (包含了顺序表为空的情况)return false;}e = L.data[i-1];for (int j = i; j < L.length; ++j) {L.data[j-1] = L.data[j];}--L.length;return true;
}/** * @brief 顺序表 按位查找* @param SqList & L	顺序表* @param int i			元素位序* @param int e			查找第i位次元素值* @return 返回说明*     -<em>false</em> 查找失败*     -<em>true</em> 查找成功*/
bool GetElem(const SqList &L, int i, int &e) {if (i < 1 || i > L.length) {return false;  // 超出范围,返回失败}e = L.data[i - 1];  // 下标从 0 开始,需要减一return true;
}/** * @brief 顺序表 按值查找* @param SqList & L	顺序表* @param int i			元素位序* @param int e			查找第i位次元素值* @return 返回说明*     int 值为e的元素位次*		0 查询失败*/
int LocateElem(const SqList &L, int e) {for (int i = 0; i < L.length; ++i) {if (L.data[i] == e) {	// 结构体 需要判断每一项是否相等return i + 1;}}return 0;					// 退出循环,说明查找失败,返回0	
}/** * @brief 顺序表输出* @param const SqList &L	顺序表* @return void*/
void PrintList(const SqList &L) {for (int i = 0; i < L.length; ++i) {cout << L.data[i] << " ";}cout << endl;
}/** * @brief 顺序表判空操作* @param const SqList &L	顺序表* @return 返回说明*     -<em>false</em> 不为空*     -<em>true</em> 为空*/
bool Empty(const SqList &L) {return L.length == 0;
}/** * @brief 顺序表求表长* @param const SqList &L	顺序表* @return 返回说明*     int 表长 */
int Length(const SqList &L) {return L.length;
}int main() {SqList L;InitList(L);  // 初始化一个空顺序表// 测试 ListInsert 函数ListInsert(L, 1, 1);ListInsert(L, 2, 2);ListInsert(L, 3, 3);cout << "After inserting elements: ";PrintList(L);  // 期望输出:1 2 3// 测试 ListDelete 函数int deletedElement = 0;ListDelete(L, 2, deletedElement);  // 删除第2个元素cout << "Deleted element: " << deletedElement << endl;  // 期望输出:Deleted element: 2cout << "After deleting elements: ";PrintList(L);  // 期望输出:1 3// 测试 GetElem 函数int element = 0;bool success = GetElem(L, 2, element);  // 获取第2个元素if (success) {cout << "Element at position 2: " << element << endl;  // 期望输出:Element at position 2: 3} else {cout << "Failed to get element." << endl;}// 测试 LocateElem 函数int position = LocateElem(L, 1);  // 查找元素1的位置if (position != 0) {cout << "Position of element 1: " << position << endl;  // 期望输出:Position of element 1: 1} else {cout << "Element 1 not found." << endl;}// 测试 Empty 函数bool isEmpty = Empty(L);  // 判断顺序表是否为空cout << "Is the list empty? " << (isEmpty ? "Yes" : "No") << endl;  // 期望输出:Is the list empty? No// 测试 Length 函数int length = Length(L);  // 获取顺序表的长度cout << "Length of the list: " << length << endl;  // 期望输出:Length of the list: 2return 0;
}

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

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

相关文章

学习总结14

# 【CSGRound1】天下第一 ## 题目背景 天下第一的 cbw 以主席的身份在 8102 年统治全宇宙后&#xff0c;开始了自己休闲的生活&#xff0c;并邀请自己的好友每天都来和他做游戏。由于 cbw 想要显出自己平易近人&#xff0c;所以 zhouwc 虽然是一个蒟蒻&#xff0c;也有能和 c…

Docker- chapter 1

note 1: docker 利用 volume 进行 presist data。 eg : compose.yaml&#xff1a; volumes:database: //# named db by self list golbal volumes&#xff1a; docker volume ls # the volumes on the disk inpect someone volume&#xff1a; docker volume inspect m…

关于harbor做HA

我起初是用helm在k8s上装的harbor&#xff0c;最近遇到如下故障&#xff1a;就是服务器硬件设备故障突然死机&#xff0c;恰巧是harbor容器所在的服务器&#xff0c;其他在这个服务器上运行的容器&#xff0c;由kubelet调度到其他正常的服务器上重启去了&#xff0c;但harbkor并…

@ 代码随想录算法训练营第6周(C语言)|Day39(动态规划)

代码随想录算法训练营第6周&#xff08;C语言&#xff09;|Day39&#xff08;动态规划&#xff09; Day39、动态规划&#xff08;包含题目 ● 62.不同路径 ● 63. 不同路径 II &#xff09; 62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点…

opencv案例实战:条码区域分割

前言 识别二维码是一个日常生活中常见的应用,而识别之前,需要先分割出条形码的区域来获取条形码。我们可以使用OpenCV便捷的获取条码的区域。 逐步分析 为了了解数据处理的过程,我们逐步分析并显示处理过程 查看图像 在读入时,传入参数cv2.IMREAD_GRAYSCALE可以直接按…

2024年陕西省安全员C证证考试题库及陕西省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年陕西省安全员C证证考试题库及陕西省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

【DC-9靶场渗透】

文章目录 前言 一、确定靶机地址 二、信息收集 三、寻找漏洞 四、进一步漏洞挖掘 五、关键文件 六、ssh爆破 七、提权 总结 前言 马上过年了&#xff0c;年前再做一下DC靶场最后一个靶机。 一、确定靶机地址 1、可使用arp-scan命令 靶机地址为&#xff1a;172.16.10…

C语言---------对操作符的进一步认识

操作符中有⼀些操作符和⼆进制有关系&#xff0c;我们先学习了⼀下⼆进制的和进制转换的知识。 1.原码、反码和补码。 有符号整数的三种表⽰⽅法均有符号位和数值位两部分&#xff0c; 2进制序列中&#xff0c;最⾼位的1位是被当做符号位&#xff0c;剩余的都是数值位。 符号…

GDB调试命令大全

GDB调试命令大全 启动运行设置/查看断点(breakpoint)设置/查看观察点(watchpoint)设置/查看捕捉点(catchpoint)维护停止点维护条件停止点停止点设置运行命令断点菜单恢复程序运行和单步调试信号产生信号量线程 转载自&#xff1a; https://www.cnblogs.com/gqtcgq/p/7511974.h…

树的三种遍历方式-算法

题目 树的三种遍历方式&#xff0c;前序&#xff0c;中序&#xff0c;后续 解题 通过递归 public static List<Integer> preorderTraversal(TreeNode treeNode) {List<Integer> result new ArrayList<>();if (treeNode null) {return result;}List<…

python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…

【Android-Compose】手势检测实现按下、单击、双击、长按事件,以及避免频繁单击事件的简单方法

目录&#xff1a; 1 不需要双击事件 规避频繁单击事件2 需要双击事件&#xff08;常规写法&#xff09;3 后记&#xff1a;不建议使用上面的代码自定义按钮 1 不需要双击事件 规避频繁单击事件 var firstClickTime by remember { mutableStateOf(System.currentTimeMillis()…

vue实现查询搜索框下拉字典

字典表 前端页面显示 依据这个字典表实现动态查询 初始化数组 首先先在全局变量里定义一个数据存放查询出来的数据 data() {return {dicts: []};},生命周期 查询的时候是声明周期开始的时候&#xff0c;原本增删改查页面在生命周期开始的时候就查询了页面的数据获得了列表值…

ElasticSearch-SpringBoot整合ElasticSearch

六、SpringBoot整合ElasticSearch 1、浏览官方文档 1、查找跟ES客户端相关的文档 使用Java REST Client 选择Java Hight Level REST Client 2、创建项目的准备 1.找到原生的依赖 2.找到对象 3.分析这个类里面的方法 3、正式创建项目 1.创建工程 2.导入依赖 注意依赖版本…

Python 函数式编程进阶:map、filter、reduce

Python 函数式编程进阶&#xff1a;map、filter、reduce 介绍map 函数作用和语法使用 map 函数Lambda 函数的配合应用 filter 函数作用和语法使用 filter 函数Lambda 函数的结合运用 reduce 函数作用和语法使用 reduce 函数典型应用场景 介绍 在函数式编程中&#xff0c;map、…

【QT】opcuaServer 的构建

【QT】opcuaServer 的构建 前言opcuaServer实现测试 前言 在博文【opcua】从编译文件到客户端的收发、断连、节点查询等实现 中&#xff0c;我们已经介绍了如何在QT 中创建opucaClient 。在本期的博文中&#xff0c;我们基于之前的部署环境&#xff0c;介绍一下如何构建opcuaS…

springboot与Elasticsearch版本兼容对比

首先 大家在下载 Elasticsearch 时 最好先弄清楚版本 因为 如果 Spring Boot 版本 不兼容 Elasticsearch 那就是到头一场空了 Elasticsearch 版本 6.x 可以兼容 Spring Boot 2.x Elasticsearch 版本 7.x 可以兼容 Spring Boot 2.x 3.x 4x Elasticsearch 版本 7.x 以及 8.x 可以…

Flask 入门4:Flask 模板

1. 前言 Flask 拥有丰富的扩展方法&#xff0c;且都有统一的特点&#xff1a;简单和即学即用。当我们要实现某个功能之前&#xff0c;可以提前去搜一搜这个功能包是否已经存在&#xff0c;这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢&#xff0c;这里推荐两个方…

MySQL重要进程

MySQL的主要进程包括以下几种&#xff1a; 1.mysqld&#xff08;也称mysqld_safe&#xff09;&#xff1a;这是MySQL服务器的守护进程。它负责接收客户端连接、处理查询并管理数据库文件等操作。可通过命令行或配置文件来指定其运行参数。 2.mysqladmin&#xff1a;用于管理M…