线性表的插入、删除和查询操作
线性表的插入、删除和查询操作
1、定义线性表
定义一个线性结构,有列表默认长度设置为50,列表数量
#include <stdio.h>
#define MaxSize 50typedef int Element;
typedef struct{Element data[MaxSize];int length;
}SqList;
2、顺序表插入
插入顺序表
第一步:判断是否符合插入,插入的数据不能超过顺序表的长度
第二部:如何进行插入,可以这样理解,顺序表要插入,之前的数据肯定都是要向后移动的,所以直接从最后一个元素向后移动,不能从插入的位置向后移动,不然会把之后的元素覆盖,这样就找不到了,所以结束条件是到插入的位置,遍历循环是减减
第三步:插入之后,顺序表的长度增加了
#include <stdio.h>#define MaxSize 50typedef int Element;
typedef struct{Element data[MaxSize];int length;
}SqList;bool SqListInsert(SqList &L,Element position,Element num)
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
3、顺序表打印
为了后面看到是否插入成功,可以写一个遍历打印顺序表元素
#include <stdio.h>
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{Element data[MaxSize];int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num)
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
//顺序表打印
void SqListPrint(SqList L)
{for(int i = 0;i<L.length;i++){printf("%5d",L.data[i]);}printf("\n");
}
4、顺序表插入执行
主函数进行测试顺序表插入是否正确
#include <stdio.h>
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{Element data[MaxSize];int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num)
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
//顺序表打印
void SqListPrint(SqList L)
{for(int i = 0;i<L.length;i++){printf("%5d",L.data[i]);}printf("\n");
}
//程序入口
int main(){//定义一个顺序表,变量lSqList l;// 给顺序表初始化元素l.data[0]=1;l.data[1]=0;l.data[2]=3;l.data[3]=4;l.data[4]=5;l.length=5; // 设置长度//判断标志变量bool ret;// 调用顺序表插入ret = SqListInsert(l,1,60);// 判断顺序表插入是否成功if (ret) {printf("SqList insert success!\n");SqListPrint(l);}else{printf("SqList insert failed!\n");}return 0;
}
执行结果如下
5、顺序表删除
同插入差不多,删除顺序表如下
第一步:判断是否符合删除条件,删除的位置是要在顺表的长度之内的
第二部:如何进行删除,可以这样理解,顺序表要删除,之后的数据肯定都是要向前移动的,所以直接从要删除位置开始向前移动,不能从最后的位置向前移动,不然会把之前的元素覆盖,这样就找不到了,所以结束条件是到最后长度的位置,遍历循环是加加
第三步:删除之后,顺序表的长度减少了
#include <stdio.h>
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{Element data[MaxSize];int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num) 会改变SqList,需要引用
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
// 顺序表表删除
bool SqListDelete(SqList &L,ElemType position,ElemType &del) //SqList &L是因为会改变SqList,需要引用;ElemType &del要保存删除的具体数据并输出
{if(position<1 || position>L.length){return false;}del = L.data[position - 1];for (int i = position; i < L.length; i++) {L.data[i - 1] = L.data[i];}L.length--;return true;
}
//顺序表打印
void SqListPrint(SqList L)
{for(int i = 0;i<L.length;i++){printf("%5d",L.data[i]);}printf("\n");
}
6、顺序表删除执行
主函数进行测试顺序表删除是否正确
#include <stdio.h>
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{Element data[MaxSize];int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num)
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
//顺序表打印
void SqListPrint(SqList L)
{for(int i = 0;i<L.length;i++){printf("%5d",L.data[i]);}printf("\n");
}
//程序入口
int main(){//定义一个顺序表,变量lSqList l;// 给顺序表初始化元素l.data[0]=1;l.data[1]=0;l.data[2]=3;l.data[3]=4;l.data[4]=5;l.length=5; // 设置长度//判断标志变量bool ret;// 调用顺序表删除ElemType del;ret = SqListDelete(l,2,del);if (ret) {printf("SqList delete success!\n");printf("delete element is %3d\n", del);SqListPrint(l);} else {printf("SqList delete failed!\n");}return 0;
}
执行结果如下
7、顺序表查询
查询就比较简单,进行遍历循环是否相等就可以,这里我们不进行有重复的元素
#include <stdio.h>
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{Element data[MaxSize];int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num) 会改变SqList,需要引用
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
// 顺序表表删除
bool SqListDelete(SqList &L,ElemType position,ElemType &del) //SqList &L是因为会改变SqList,需要引用;ElemType &del要保存删除的具体数据并输出
{if(position<1 || position>L.length){return false;}del = L.data[position - 1];for (int i = position; i < L.length; i++) {L.data[i - 1] = L.data[i];}L.length--;return true;
}
// 顺序表查找
int SqListQuery(SqList L, ElemType num) //ElemType num要查看的具体数据
{for(int i = 0;i<L.length;i++){if(num == L.data[i]){return i+1; // 返回要查看的数据在那个第几个,从1开始,元素下标加1}}return 0;
}
//顺序表打印
void SqListPrint(SqList L)
{for(int i = 0;i<L.length;i++){printf("%5d",L.data[i]);}printf("\n");
}
8、循序表查询执行
主函数进行测试顺序表查询是否正确
#include <stdio.h>
//定义固定大小
#define MaxSize 50
//类型重命名
typedef int Element;
//定义struct并命名
typedef struct{Element data[MaxSize];int length;
}SqList;
//顺序表插入
bool SqListInsert(SqList &L,Element position,Element num)
{if(position<1 || position>L.length){return false;}for(int i=L.length;i>=position;i--){L.data[i] = L.data[i-1];}L.data[position-1] = num;L.length++;return true;
}
//顺序表打印
void SqListPrint(SqList L)
{for(int i = 0;i<L.length;i++){printf("%5d",L.data[i]);}printf("\n");
}
//程序入口
int main(){//定义一个顺序表,变量lSqList l;// 给顺序表初始化元素l.data[0]=1;l.data[1]=0;l.data[2]=3;l.data[3]=4;l.data[4]=5;l.length=5; // 设置长度// 调用顺序表查找ElemType num; // 接收要查找元素的位置num = SqListQuery(l,0); // 0为要查找的具体数值if (num == 0) {printf("do not find the element!\n");} else {printf("find the element!\n");printf("the elemet is %d postion!\n", num);}return 0;
}
结果如下
相关文章:
线性表的插入、删除和查询操作
线性表的插入、删除和查询操作 1、定义线性表 定义一个线性结构,有列表默认长度设置为50,列表数量 #include <stdio.h> #define MaxSize 50typedef int Element; typedef struct{Element data[MaxSize];int length; }SqList;2、顺序表插入 插入…...
基于深度学习网络的疲劳驾驶检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1疲劳检测理论概述 4.2 本课题说明 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 In_layer_Size [227 227 3]; img_size [224,…...
【文件系统】Linux文件系统的基本存储机制
Linux文件系统是Linux操作系统的重要组成部分,它负责管理计算机存储设备上的文件和目录。Linux文件系统采用类Unix的设计,具有强大的性能和可扩展性,支持多种文件系统类型,如ext4、XFS、Btrfs等。在项目存储架构的设计中ÿ…...
Outlook导入导出功能灰色,怎么解决
下载安装 Outlook 软件后,登陆账号,然后选择“文件” - “导出”,结果发现“导出”按钮是灰色的,根本无法导出。根据官方说法:由于配置没有完成或者office产品没有正确激活。outlook导出键为灰色原因由于配置没有完成或…...
Chrome 同站策略(SameSite)问题
问题产生 问题复现: A项目页面使用 iframe 引用了B项目 B项目登录页面输入账号密码后点击登录 无法跳转 尝试解决: 在B项目修改了跳转方式 但无论是 this.$router.push 还是 window.herf 都无法实现跳转在iframe中使用 sandbox 沙箱属性 同样无法实现跳…...
docker搭建nginx+php-fpm
docker run --name nginx -p 8898:80 -d nginx:1.20.2-alpine# 将容器nginx.conf文件复制到宿主机 docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf# 将容器conf.d文件夹下内容复制到宿主机 docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf…...
数据结构与算法---单调栈结构
数据结构与算法---单调栈结构 1 滑动窗口问题 1 滑动窗口问题 1 滑动窗口问题 由一个代表题目,引出一种结构 【题目】 有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 例如,数组为[4,3,…...
Python爬虫:某书平台的Authorization参数js逆向
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
Android MediaCodec 框架 基于codec2
系列文章的目的是什么? 粗略: 解码需要哪些基础的服务?标准解码的调用流程?各个流程的作用是什么?解码框架的层次?各个层次的作用? 细化: 解码参数的配置?解码输入数…...
【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)
您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…...
Go TLS服务端绑定证书的几种方式
随着互联网的发展,网站提供的服务类型和规模不断扩大,同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)[1]已然成为Web服务最重要的安全基础设施之一。默认情况下,一个TLS服务器通常只绑定一个证书[2],但…...
【算法与数据结构】--高级算法和数据结构--排序和搜索
一、常见排序算法 以下是一些常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。每种排序算法的讲解以及附带C#和Java示例: 1.1 冒泡排序 (Bubble Sort) 讲解: 冒泡排序是一种简单的比较排序算法。它多次遍历待排序的…...
【Java】jvm 元空间、常量池(了解)
JDK1.8 以前的 HotSpot JVM 有方法区,也叫永久代(permanent generation)方法区用于存放已被虚拟机加载的类信息,常量、静态遍历,即编译器编译后的代码JDK1.7 开始了方法区的部分移除:符号引用(S…...
Spring Boot自动加载
问:自动装配如何实现的? 答:简单来说就是自动去把第三方组件的Bean装载到IOC容器中,不需要开发人员再去写Bean相关的配置,在springboot应用里面只需要在启动类上去加上SpringBootApplication注解,就可以去实…...
MPNN 模型:GNN 传递规则的实现
首先,假如我们定义一个极简的传递规则 A是邻接矩阵,X是特征矩阵, 其物理意义就是 通过矩阵乘法操作,批量把图中的相邻节点汇聚到当前节点。 但是由于A的对角线都是 0.因此自身的节点特征会被过滤掉。 图神经网络的核心是 吸周围…...
Flink kafka 数据汇不指定分区器导致的问题
背景 在flink中,我们经常使用kafka作为flink的数据汇,也就是目标数据的存储地,然而当我们使用FlinkKafkaProducer作为数据汇连接器时,我们需要注意一些注意事项,本文就来记录一下 使用kafka数据汇连接器 首先我们看…...
【软考】14.1 面向对象基本概念/分析设计测试
《面向对象开发》 对象 现实生活中实际存在的一个实体;构成系统的一个基本单位由对象名、属性和方法组成 类 实体的形式化描述;对象是类的实例,类是对象的模板可分为:实体类:现实世界中真实的实体接口类(边…...
MFC-对话框
目录 1、模态和非模态对话框: (1)、对话框的创建 (2)、更改默认的对话框名称 (3)、创建模态对话框 1)、创建按钮跳转的界面 2)、在跳转的窗口添加类 3࿰…...
Essential Steps in Natural Language Processing (NLP)
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
Flink中KeyBy、分区、分组的正确理解
1.Flink中的KeyBy 在Flink中,KeyBy作为我们常用的一个聚合类型算子,它可以按照相同的Key对数据进行重新分区,分区之后分配到对应的子任务当中去。 源码解析 keyBy 得到的结果将不再是 DataStream,而是会将 DataStream 转换为 Key…...
QT6集成CEF3--01 准备工作
QT6集成CEF3--01 准备工作 一、所有使用到的工具软件清单:二、准备工作三、cefclient示例程序四、特别注意 一、所有使用到的工具软件清单: CEF 二进制发行包 cef_binary_117.2.5gda4c36achromium-117.0.5938.152_windows64.tar.bz2 CMake 编译工具 cmake-3.22.6-windows-x86_…...
随机误差理论与测量
文章目录 第1节 随机误差的性质和特点第2节 随机误差的数字特性标准差的估计 第3节 单次测量结果的精度指标第4节 多次测量结果的精度指标算数平均值的分布特性与标准差算数平均值的置信度算数平均值的精度指标(常用的有4个) 第5节 非等精度测量 第1节 随机误差的性…...
树莓派4b配置通过smbus2使用LCD灯
出现报错: FileNotFoundError: [Errno 2] No such file or directory: ‘/dev/i2c-1’ 则说明没有打开I2C,可通过如下步骤进行设置 1、打开树莓派配置 sudo raspi-config2、进入Interface Options,配置I2C允许 目前很多python3版本已经不…...
UPS 原理和故障案例分享
摘要:不间断电源UPS (Uninterruptible Power System),主要是由整流器、 逆变器、静态旁路和储能装置等组成;具备高可靠性、高可用性和高质量的独立 电源。通过对收集的 UPS 故障案例进行分析,从施工,调试和运行三个方面筛选 出四个故障案例与…...
Stream流中的 max()和 sorted()方法
需求:某个公司的开发部门,分为开发 一部 和 二部 ,现在需要进行年中数据结算。分析: 员工信息至少包含了(名称、性别、工资、奖金、处罚记录)开发一部有 4 个员工、开发二部有 5 名员工分别筛选出 2 个部门…...
云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载
文章目录 前言1、Docker是干嘛的?2、Docker对于渗透测试影响?3、Docker渗透测试点有那些?4、前渗透-判断在Docker中方式一:查询cgroup信息方式二:检查/.dockerenv文件方式三:检查mount信息方式四࿱…...
PDE数值解中,为什么要引入弱解(weak solution)的概念?
See https://www.zhihu.com/question/24243246?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384...
使用pdfjs实现在线预览pdf
在工作中可能会遇到前端展示pdf文件进行预览并提供下载的需求场景,例如操作指引,这个时候需要寻找一款实现该功能的插件,以pdjjs举例子 1. 安装pdf.js npm install pdfjs-dist2. 引入pdf.js import pdfjsLib from pdfjs-dist3.加载pdf文件流 这个地方区分是请求后端接口还是…...
汇编语言基础
引言 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…...
格式工厂怎么把两个视频合并在一起
免费的工具谁不喜欢呢,今天为大家介绍的是格式工厂这款多功能视频转换软件,然而今天主要为大家介绍的是格式工厂的视频合并功能。 是的,你没有听错,格式工厂除了转换之外,还可以视频合适、视频剪辑、视频分割、去水印…...
小企业如何优化网站建设/网络推广工作好干吗
用户对象类(User Object Class)这个是在 LDAP 用户对象中对用户分类的名字。例如:user用户对象过滤器(User Object Filter)当对用户对象进行搜索的时候使用的过滤器。例如:(&(objectCategoryPerson)(s…...
做电影网站哪个系统好/seo外链推广工具下载
1. 题目要求多组输入时, 自己原来常用:while(scanf(“”%d”,&n)!EOF){ if(n0) return 0;else ……; }//其实想这样每输入一个测试数据就输出一个,还有个人想应该会加大程序执行的时间。 新学到的:do{ scanf(“%d”,&n)…...
成都网站建设时代汇创/百度广告点击一次多少钱
// 克隆已有仓库 git clone 仓库地址 // 暂存区 git add . // 本地仓库 git commit -m "详情描述" // 拉下来的代码是否最新 git pull // 推送远程仓库 git push// 查看分支 git branch // 切换分支 git checkout 分支名 // 暂存区 git add . // 本地仓库 git commit…...
怎么和其他网站交换友情链接/营销策划书
使用 React Native 构建移动应用程序比你想象的要容易——那是因为它使用了 JavaScript,这是一种易于学习的编程语言。在该项目一位经验丰富的开发人员的帮助下,你可以节省时间和金钱,并创建一个具有原生感觉和外观的应用程序。 React Native…...
移动端购物网站建设/免费网站seo优化
问题概述问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来… fixed属性失效了!满屏任性横飞, 如下图:问题2:有几后来含些在到气时按式近篇来又的方浏消风第三方输入法的ios机还会出现键盘弹出延迟,导致…...
wordpress主题替换/2022拉新推广赚钱的app
前言 前几天我上班路上,和小区门口开车的师傅闲聊,发现他们虽然学历不高,但挣钱的途径不少,比如固定接送多位客户,然后能通过朋友圈拓展新客户,而且通过客户口口相传,也能不断拉到生意…...