线性表的插入、删除和查询操作
线性表的插入、删除和查询操作
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…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
