数据结构 - 线性表

news2025/1/11 18:50:05

0.线性表

        1.定义

                线性表就是零个或多个相同数据元素的有限序列。

        2.线性表的存储结构

        ①.顺序结构

        ②.链式结构

        3.线性表的表示方法

例如:

一.线性表的基本运算

二.线性表的复杂运算

1.线性表的合并运算

2.线性表的去重运算

三.顺序表

1.定义

        顺序表,就是线性表的顺序存储格式

2.顺序表的实现

①.顺序表的创建

/**
 * @description:            创建一个新的顺序表
 * @param       :           无
 * @return      :           创建的顺序表的指针
*/
seqlist_t *create_seqlist(void)
{
    seqlist_t *L = NULL;

    /* 1.申请空间 */
    L = (seqlist_t *)malloc(sizeof(seqlist_t));
    if(NULL == L)
    {
        printf("malloc seqlist_t *L faild error!\n");
        return NULL;
    }

    /* 初始化顺序表内部指针的位置 */
    L->last = -1;

    return L;

}

②.置空顺序表

/**
 * @description:        清空顺序表内的数据
 * @param - L   :       要操作的顺序表
 * @return      :       无
*/
void set_empty_seqlist(seqlist_t *L)
{
    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return ;
    }

    L->last = -1;
}   

③.释放顺序表

/**
 * @description:       释放一个顺序表
 * @param L    :       要释放的顺序表的指针
 * @return     :       无
*/
void clear_seqlist(seqlist_t * L)
{
    /* 1.首先判断传入的顺序表是否有效 */
    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return ;
    }

    /* 若有效,则释放该表 */
    free(L);
}

④.判断顺序表是否满/是否空

/**
 * @description:                  判断顺序表是否为满
 * @param L         :             要进行判断的顺序表
 * @return          :             1 为满 ,其他 为非满
*/
int is_full_seqlist(seqlist_t *L)
{
    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return -1;
    }

    return (L->last == MAXSIZE - 1);

}
/**
 * @description:            判断顺序表是否为空
 * @param - L       :       要操作的顺序表
 * @return          :       1 为空,其他 为非空
*/
int is_empty_seqlist(seqlist_t *L)
{
    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return -1;
    }

    return (L->last == -1);
}

⑤.向顺序表插入一个元素

/**
 * @description:            向顺序表中指定位置前插入一个数据
 * @param L         :       要进行操作的顺序表
 * @param x         :       要插入的值
 * @param pos       :       要插入的位置
 * @return          :       0 成功, 其他 失败
*/
int insert_seqlist(seqlist_t *L,data_t x,int pos)
{
    int i = 0;

    /* 若顺序表已满,或者插入位置无效 */
    if(is_full_seqlist(L) || (pos < 0) || (pos > L->last +1))
    {
        printf("input argv is invalid\n");
        return -1;
    }

    /* 若pos要插入的位置为i,则从最后一个元素开始,到i的元素先依次往后移动一个位置 */
    for(i = L->last;i >= pos;i--)
    {
        L->data[i + 1] = L->data[i];
    }

    /* 将x的值赋给data[pos]位置 */
    L->data[pos] = x;

    /* 顺序表末尾的指针往后移动一个位置 */
    L->last++;

    return 0;
}

⑥.删除指定位置的元素

/**
 * @description:            在顺序表中指定位置删除一个数据
 * @param - pos     :       指定删除的元素的位置
 * @return          :       0 成功,其他 失败
*/
int delete_seqlist(seqlist_t *L,int pos)
{
    int i = 0;

    if(pos < 0 || pos > L->last)
    {
        printf("input pos invalid\n");
        return -1;
    }

    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return -1;
    }

    for(i = pos;i < L->last;i++)
        L->data[i] = L->data[i + 1];
    L->last--;

    return 0;

}

⑦.替换顺序表中指定位置的元素

/**
 * @description:        替换顺序表中指定位置的数据
 * @param - L   :       要操作的顺序表
 * @param - x   :       输入的元素值
 * @param - pos :       要替换的元素的位置
 * @return      :       0 成功, 其他 失败 
*/
int change_seqlist(seqlist_t *L,data_t x,int pos)
{
    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return -1;
    }

    if(pos < 0 || pos > L->last)
    {
        printf("input pos invalid\n");
        return -1;
    }

    L->data[pos] = x;

    return 0;
}

⑧.找到元素X在表中第一次出现的位置

/**
 * @description:            查找指定元素在顺序表中第一次出现的位置
 * @param - L       :       要操作的顺序表
 * @param - x       :       要查找的元素
 * @return          :       x第一次出现的位置
*/
int search_seqlist(seqlist_t *L,data_t x)
{
    int i = 0;

    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return -1;
    }

    for(i = 0;i <= L->last;i++)
    {
        if(L->data[i] == x)
            return i;   
    }

    return -1;
}   

⑨.打印顺序表的全部内容

/**
 * @description:        打印顺序表的所有数据
 * @param L     :       要进行操作的顺序表
 * @return      :       无
*/
void show_seqlist(seqlist_t *L)
{
    int i = 0;

    if(NULL == L)
    {
        printf("seqlist *L is NULL\n");
        return ;
    }

    for(i = 0;i <= L->last;i++)
        printf("L->data[%d] = %d\n",i,L->data[i]);
    
    return ;
} 

⑩.求顺序表长

/**
 * @description:            获取顺序表的长度
 * @param - L       :       要操作的顺序表
 * @return          :       顺序表的长度
*/
int get_length_seqlist(seqlist_t *L)
{
    if(NULL == L)
    {
        printf("seqlist_t *L is NULL\n");
        return -1;
    }

    return (L->last + 1);
}

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

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

相关文章

Tensorflow2 如何扩展现有数据集(缩放、随机旋转、水平翻转、平移等),从而提高模型的准确率 -- Tensorflow自学笔记14

实际生活中的数据集&#xff0c;往往不是标准的数据&#xff0c;而是有倾斜角度、有旋转、有偏移的数据&#xff0c;为了提高数据集的真实性&#xff0c;提高模型预测的准确率&#xff0c;可以用ImageDataGenerator函数来扩展数据集 import tensorflow as tffrom tensorflow.k…

单机部署Redis集群

文章目录 Redis集群1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试 3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试 4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试 Redis集群 …

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2890 标注数量(xml文件个数)&#xff1a;2890 标注数量(txt文件个数)&#xff1a;2890 标注…

基于人工智能的聊天情感分析系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 情感分析是一种自然语言处理任务&#xff0c;旨在识别文本中的情感&#xff0c;如“积极”、“消极”或“中立”。在聊天应用中&#…

Unity制作更换字体的插件

目录 1.前置知识 1.1 EditorWindow 1&#xff09;目的 2&#xff09;使用方式 1.2 OnGUI() 1&#xff09;目的 2&#xff09;使用方式 1.3 AssetDatabase 1&#xff09;目的 2&#xff09;使用方式 1.4 PrefabUtility 1&#xff09;目的 2&#xff09;使用方式 2…

永远学习:为什么人工智能难以适应新挑战

理解深度学习的局限性并追求真正的持续适应 欢迎来到雲闪世界。 “智者适应环境&#xff0c;正如水适应水瓶。”——中国谚语 “适应或灭亡&#xff0c;现在和以往一样&#xff0c;是大自然的必然法则。”——赫伯特乔治威尔斯 近年来&#xff0c;人工智能取得了长足的进步。所…

Android的logcat日志详解

Android log系统 logcat介绍 logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志&#xff0c;或把日志保存到我们指定的位置。 可以输入 adb logcat --help&#xff0c;查看一下一些简…

Xinstall助力App全渠道统计,参数传递下载提升用户体验!

在移动互联网时代&#xff0c;App已成为我们日常生活中不可或缺的一部分。然而&#xff0c;对于App开发者来说&#xff0c;如何有效地推广和运营自己的应用&#xff0c;却是一个不小的挑战。尤其是在面对众多渠道、复杂的数据统计和用户需求多样化的情况下&#xff0c;如何精准…

【ffmpeg】转换音频格式

在音频文件所在目录启动终端输入以下 ffmpeg -y -i original.aac target.mp3-y 如果输出文件已经存在&#xff0c;则覆盖它而不询问。 执行完毕后在当前文件夹目录下生成目标文件

项目9-网页聊天室9(测试报告)

1.项目背景 本项目采用 SSM框架结合 Websocket 技术构建。用户通过简单的注册和登录即可进入聊天室&#xff0c;与其他在线用户实时交 流。系统支持文字消息的快速发送和接收、消息实时推送&#xff0c;确保交流的及时性和流畅性。SSM 框架为项目提供了稳定的架构和高效的 数据…

学习笔记--MybatisPlus

官网&#xff1a;MyBatis-Plus &#x1f680; 为简化开发而生 快速入门 入门案例 引入MybatisPlus的起步依赖 定义Mapper 问题&#xff1a; MybatisPlus中Invalid bound statement (not found): com.itheima.mp.mapper.UserMapper.insert 一定要指定实体类&#xff01;&am…

ASTER 地表动能温度 (AST_08) 是利用 8 至 12 µm 光谱范围内的五个热红外波段

ASTER L2 Surface Temperature V00 简介 ASTER 地表动能温度 (AST_08) 是利用 8 至 12 m 光谱范围内的五个热红外波段&#xff08;白天或夜间获取&#xff09;生成的 (https://lpdaac.usgs.gov/documents/996/ASTER_Earthdata_Search_Order_Instructions.pdf)。 它只包含陆地…

Slideflow:数字病理学中的深度学习与全切片可视化工具库|文献精析·24-09-02

小罗碎碎念 群里今天有人提问Histolab相关的问题&#xff0c;作者在交流的过程中谈到了Slideflow&#xff0c;恰好我没有看过这篇文章&#xff0c;所以便有了这期推文。 作者角色作者姓名单位名称&#xff08;英文&#xff09;单位名称&#xff08;中文&#xff09;第一作者Jam…

性能工具之 JProfiler 简单登录案例分析实战

文章目录 一、前言二、准备工作三、使用JProfile定位问题四、登陆案例分析四、总结 一、前言 JProfiler是一款 Java的性能监控工具。可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况&#xff08;阻塞、等待等&#xff09;&#xff0c;同时可以查找应…

66、脑机接口产业联盟天津第一次全体大会参会分享

我注意到脑机联盟网上搜不到第一次和第二次大会的有关资料&#xff0c;这是非常遗憾的&#xff0c;所以我根据自己参会的记录&#xff0c;写成文章&#xff0c;与各位同学分享&#xff0c;此课件我也做成了公开课讲解&#xff0c;连接在我的Github。写这些&#xff0c;也算是为…

uAI - AI Assistant 人工智能辅助助手插件

uAI助手支持GPT 3.5 Turbo、GPT 3.5 Turbo16K、GPT 4-8k和GPT 4 Turbo-128k 什么是uAI助理? uAI Assistant是Unity游戏引擎的强大扩展,它使用GPT AI帮助游戏开发人员轻松创建专业代码和引人入胜的游戏内容。 你需要一个OpenAI密钥才能使用uAI助手!阅读我们的文档以获取更多说…

PDF 格式的文件编辑难度非常大,相比 .docx格式,它存在的意义是什么?

知乎上有个热门问题&#xff0c;PDF 格式的文件编辑难度非常大&#xff0c;相比 .docx格式&#xff0c;它存在的意义是什么&#xff1f; 回答这个问题得承认一个大前提&#xff0c;PDF是用来查看的&#xff0c;而不是编辑的。 否则就相当于提问&#xff0c;詹姆斯的足球踢得并…

Qt基础类03-直线类QLine

Qt基础类03-直线类QLine 摘要基本信息成员函数程序全貌QLine::QLine()QLine::QLine(const QPoint &p1, const QPoint &p2)QLine::QLine(int x1, int y1, int x2, int y2)QPoint QLine::p1() constQPoint QLine::p2() constint QLine::x1() constint QLine::x2() consti…

ComfyUI+Krea免费利用AI制作网站萌宠IP,五步搞定制作AI萌宠

大家好&#xff0c;这是我们网站的萌宠——Meo喵&#xff0c;是一只猫咪AI工具专家&#x1f43e;&#xff0c;嘻嘻&#x1f389;&#x1f431;。是AIGC年轻的艺术家星之&#xff0c;利用AI产品ComfyUI、Krea&#xff0c;搭配PS制作而成&#xff0c;下面先介绍一下它的形象&…

LLM大模型教程:langchain 教程

软件安装 pip install pymupdf pip install langchain pip install langchain-cli conda install -c pytorch -c nvidia faiss-gpu1.7.4 mkl2021 blas1.0mkl由于langchain不支持qwen模型&#xff0c;我们需要自定义模型 from typing import Anyfrom langchain_core.language_…