线性表的插入、删除和查询操作

news2025/1/20 6:02:37

线性表的插入、删除和查询操作

1、定义线性表

定义一个线性结构,有列表默认长度设置为50,列表数量

#include <stdio.h>
#define MaxSize 50

typedef int Element;
typedef struct{
    Element data[MaxSize];
    int length;
}SqList;

2、顺序表插入

插入顺序表

第一步:判断是否符合插入,插入的数据不能超过顺序表的长度

第二部:如何进行插入,可以这样理解,顺序表要插入,之前的数据肯定都是要向后移动的,所以直接从最后一个元素向后移动,不能从插入的位置向后移动,不然会把之后的元素覆盖,这样就找不到了,所以结束条件是到插入的位置,遍历循环是减减

第三步:插入之后,顺序表的长度增加了

#include <stdio.h>

#define MaxSize 50

typedef 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(){
	//定义一个顺序表,变量l
    SqList 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(){
	//定义一个顺序表,变量l
    SqList 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(){
	//定义一个顺序表,变量l
    SqList 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;
}

结果如下
在这里插入图片描述

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

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

相关文章

【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【手撕排序系列】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

PCL点云处理之配准中的匹配对连线可视化显示 Correspondences(二百一十九)

PCL点云处理之配准中的匹配对连线可视化显示 Correspondences(二百一十九) 一、算法介绍二、算法实现1.可视化代码2.完整代码(特征匹配+可视化)最终效果一、算法介绍 关于点云配准中的匹配对,如果能够可视化将极大提高实验的准确性,还好PCL提供了这样的可视化工具,做法…

【Java零基础入门到就业】第一天:java简介和cmd窗口的一些常见命令

1、java简介 Java是一种基于类的、面向对象的编程语言&#xff0c;它被设计成具有尽可能少的实现依赖。它旨在让应用程序开发人员编写一次&#xff0c;并在任何地方运行(WORA)&#xff0c;这意味着编译后的Java代码可以在所有支持Java的平台上运行&#xff0c;而无需重新编译。…

pikachu靶场搭建及通关

一、靶场搭建 下载工具&#xff1a;phpstudy Pikachu靶机下载地址&#xff1a; https://github.com/zhuifengshaonianhanlu/pikachu 下载后解压缩并放入如下文件夹&#xff08;网站根目录&#xff09; 建议修改文件名称为 pikachu 修改配置文件&#xff08;mysql 用户名&…

ORA-00600: internal error code, arguments

通过rman将11g异机升级到19c时&#xff0c;应用归档时报错&#xff0c;报错如下 RMAN> recover database ; Starting recover at 2023-10-15 21:10:02 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID5776 device typeDISK starting media recovery media recove…

在vs code中创建一个名为 “django_env“ 的虚拟环境报错?!以下方法可以解决

# vs code 终端窗口中运行&#xff1a; mkvirtualenv django_env # 拓展&#xff1a; mkvirtualenv django_env 是一个命令&#xff0c;用于创建一个名为 "django_env" 的虚拟环境。虚拟环境是一种用于隔离不同Python项目所需依赖的工具。通过创建虚拟环境&#x…

在pycharm中运行js文件,附加node.js下载步骤

文章目录 一、前言二、node.js安装和配置(如果之前就安装好了可以直接跳过)1、进入官网下载安装包2、在本地安装node.js3、环境配置4、验证是否安装成功5、修改下载位置(默认是在c盘&#xff0c;这个根据个人需求)6、设置默认模块包7、测试一下是否修改成功(要进入管理员模式的…

YOLOv5网络结构图

网络结构图&#xff08;简易版和详细版&#xff09; 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; backbone&#xff0c;neck&#xff0c;head。 如上图所示…

测试左移右移-理论篇

目录 前言一、浅解左移1.什么是测试左移&#xff1f;1.1对产品1.2对开发1.3对测试1.4对运维 二、浅解右移1.1对产品1.2对开发1.3对测试1.4对运维 三、总结 前言 测试左移右移&#xff0c;很多人说能让测试更拥有主动权&#xff0c;展示出测试岗位也是有很大的价值&#xff0c;…

分享一个制作AI视频的好工具

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 同行十二年&#xff0c;不知木兰是女郎。 前几天在【AI破局俱乐部】看到了【元峰】老师的分享&#xff0c;干货满满&#xff0c;这个分享是关于数字人的…

动态规划算法(3)--0-1背包、石子合并、数字三角形

目录 一、0-1背包 1、概述 2、暴力枚举法 3、动态规划 二、石子合并问题 1、概述 2、动态规划 3、环形石子怎么办&#xff1f; 三、数字三角形问题 1、概述 2、递归 3、线性规划 四、租用游艇问题 一、0-1背包 1、概述 0-1背包&#xff1a;给定多种物品和一个固定…

OpenCV完美实现两张图片的全景拼接(详细教程)

目录 1&#xff0c;主要步骤 1.1 导入需要的包和模块&#xff0c;并读取两张待拼接的图片&#xff0c;这里我们假设它们为 left.jpg 和 right.jpg。 1.2 创建SIFT检测器 1.3 创建一个基于 FLANN 的匹配器 1.4 筛选过程删除掉一些不合适的匹配点&#xff0c;只保留最好的…

[Spring] SpringMVC 简介(三)

目录 九、SpringMVC 中的 AJAX 请求 1、简单示例 2、RequestBody&#xff08;重点关注“赋值形式”&#xff09; 3、ResponseBody&#xff08;经常用&#xff09; 4、为什么不用手动接收 JSON 字符串、转换 JSON 字符串 5、RestController 十、文件上传与下载 1、Respo…

03_51单片机点亮LED灯

51单片机是一种非常常见的单片机型号&#xff0c;广泛应用于各种嵌入式系统和电子设备中。LED灯是一种常见的输出设备&#xff0c;用于显示信息或指示状态。下面是关于51单片机控制LED灯的介绍&#xff1a; 1. 连接LED灯&#xff1a;将LED的正极连接到51单片机的一个I/O引脚&a…

英语——歌曲篇——All Out Of Love

All Out Of Love [Air Supply失落的爱] 歌词 I’m lying alone with my head on the phone Thinking of you till it hurts I know you hurt too but what else can we do Tormented and torn apart I wish I could carry your smile in my heart For times when my life se…

MacOS ventura跳过配置锁

Macbook pro 2021跳配置锁 1.什么是配置锁&#xff1f; 配置锁顾名思义就是美国一些企业和公司向苹果工公司定制采购的机器&#xff0c;这些机器一般供应内部员工使用&#xff0c;这种机器和正常机没有什么区别&#xff0c;也是无锁三网机器&#xff0c;功能和正常机器一摸一…

去雨去雪去雾算法本地实验速度对比

在进行去雨去雪去雾算法的实验过程中&#xff0c;博主使用自己的电脑进行实验&#xff0c;尽管能够成功运行&#xff0c;但速度却属实不尽人意&#xff0c;博主的笔记本显卡是GTX960&#xff0c;显存为4G&#xff0c;在进行实验的过程中&#xff0c;batch-size只能设置为3&…

找不到mfc140u.dll,无法继续执行代码 cdr

在计算机系统中&#xff0c;DLL文件&#xff08;动态链接库&#xff09;是一种非常重要的资源。它们包含了许多可以在程序运行时被调用的代码和数据。然而&#xff0c;当某个特定的DLL文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行。本文将详细介绍五个解决mfc140u.…

flink教程

文章目录 来自于尚硅谷教程1. Flink概述1.1 特点1.2 与SparkStreaming对比 2. Flink部署2.1 集群角色2.2 部署模式2.3 Standalone运行模式2.3.1 本地会话模式部署2.3.2 应用模式 2.4 YARN运行模式2.4.1 会话模式部署2.4.2 应用模式部署 2.5 历史服务 3. 系统架构3.1 并行度3.2 …

线性回归原理

1、 线性回归的原理 1.1 线性回归应用场景 房价预测 销售额度预测 金融:贷款额度预测、利用线性回归以及系数分析因子1.2 什么是线性回归 1.2.1定义与公式 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的…