Linux-数据结构-线性表-顺序表

embedded/2025/3/18 19:24:58/

一.数据结构的基本概念

【1】数据结构

相互之间存在一种或多种特定关系的数据元素的集合。
    (1)逻辑结构
        集合,所有数据在同一个集合中,关系平等。
        线性,数据和数据之间是一对一的关系
        树, 一对多
        图,多对多
        
    (2) 物理结构(在内存当中的存储关系)
        顺序存储,数据存放在连续的存储单位中。逻辑关系和物理关系一致
        链式,数据存放的存储单位是随机或任意的,可以连续也可以不连续。


【2】 数据的类型,ADT    abstruct datatype 


        是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
        原子类型,int,char,float
        结构类型,sturct, union,

        抽象数据类型, 数学模型 + 操作。
        
        程序 =  数据 + 算法

【3】算法
 

    是解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,每条指令表示一个或多个操作。
    
    
    (1)算法的特征,
    1,输入,输出特性,输入时可选的,输出时必须的。
    2,有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。
    3,确定性,同一个输入,会得到唯一的输出。
    4,可行性,每一个步骤都是可以实现的。
    
    
   (2) 算法的设计,
    1,正确性,
        语法正确
        合法的输入能得到合理的结果。
        对非法的输入,给出满足要求的规格说明
        对精心选择,甚至刁难的测试都能正常运行,结果正确
    2,可读性,便于交流,阅读,理解
    3,健壮性,输入非法数据,能进行相应的处理,而不是产生异常
    4,高效,存储低,效率高 

【4】算法时间复杂度

              也就是执行这个算法所花时间的度量
              n  1  = O(n)   O(1)
          推到时间复杂度
        1,用常数1 取代运行时间中的所有加法常数
        2,在修改后的运行函数中,只保留最高阶项。
        3,如果最高阶存在且不是1,则取除这个项相乘的常数。

二.线性表-顺序表

【1】线性表的概念

线性表
    零个或多个数据元素的有限序列
    元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。
    当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。

【2】线性表的常规操作  ADT

typedef struct    person {
    char name[32];
    char sex;
    int age;
    int score;
}DATATYPE;
typedef int Datatype;
typedef struct list {
    DATATYPE *head;
    int tlen;
    int clen;
}SeqList;

SeqList *CreateSeqList(int len);
int DestroySeqList(SeqList *list);
int ShowSeqList(SeqList *list);
int InsertTailSeqList(SeqList *list, DATATYPE data);
int IsFullSeqList(SeqList *list);
int IsEmptySeqList(SeqList *list);
int InsertPosSeqList(SeqList *list, DATATYPE data, int pos);
int FindSeqList(SeqList *list, char *name);
int ModifySeqList(SeqList *list, char *old, DATATYPE new);
int DeleteSeqList(SeqList *list, char *name);
int ClearSeqList(SeqList *list);
内存泄露检测工具
sudo apt-get install valgrind
valgrind ./all

【3】线性表顺序存储的优点,缺点


优点
    1,无需为表中的逻辑关系增加额外的存储空间
    2,可以快速随机访问元素O(1)
缺点
    1,插入,删除元素需要移动元素o(n)
    2,无法动态存储。

【4】源码

(1)思维导图

头用来存放数据,Tlen是能存放的总长度,clen是当前存放的个数

(2)seqlist.h

(3)seqlist.c

【1】开堆上的空间

【2】在head最后面插入数据

【3】判断空和满

【4】打印数据

【5】插入数据,传入插入的位置和数据

【6】查找

【7】打印其中一项数据

【8】修改

【9】删除

【10】清理和销毁



    


http://www.ppmy.cn/embedded/173659.html

相关文章

第十六届蓝桥杯康复训练--1

题目链接:92. 递归实现指数型枚举 - AcWing题库 思路:因为题目要求必须升序输出,所以在递归遍历的时候从1开始就好,然后遍历过的变量打个标记,避免重复遍历,到n个就输出路径上所有的数,需要注意…

2025系统架构师(一考就过):案例之五:典型架构、架构演化、人工智能、云计算、大数据

六、中间件技术、典型架构 ◆中间件:在一个分布式系统环境中处于操作系统和应用程序之间的软件,可以在不同的技术之间共享资源,将不同的操作系统、数据库、异构的网络环境以及若干应用结合成一个有机的协同工作整体。 ◆中间件位于客户机/服务器的操作系…

项目--五子棋(前置知识)

本项目使用的系统环境是Ubuntu20.04 环境搭建 下载工具的安装 先来补充一个小知识:Ubuntu系统和CentOS系统的 包管理机制不同,用来查询软件源的命令也不同: Ubuntu系统使用的是apt包管理系统:rpm命令主要用于基于RPM包管理的系…

基于MPC8377的MCPU 3U机箱CPCI板卡

板卡简介: 本板为主控板(MCPU),主要负责逻辑控制、数据的处理、板卡的通信管理、系统安全保护切换以及数据存储等功能。 性能规格: 电源:DC5V CPU:MPC8377 核数:单核 32位 主频…

[新能源]新能源汽车快充与慢充说明

接口示意图 慢充接口为交流充电口(七孔),快充接口为直流充电口(九孔)。 引脚说明 上图给的是充电口的引脚图,充电枪的为镜像的。 慢充接口引脚说明 快充接口引脚说明 充电流程 慢充示意图 慢充&…

路由器与防火墙配置命令

路由器与防火墙配置命令 小明啊,你不是学计算机的嘛,叔叔家的路由器坏了,可以过来帮叔叔看看吗 命令可以用缩写,造就一堆容易造成歧义的缩写,比如add是address的缩写,sh是shutdown的缩写。 默认为Cisco路…

Tomcat新手登峰指南:从零到部署的原子化实践

开篇:为什么选择Tomcat? 2024年StackOverflow调查显示,Tomcat以68.9%占有率蝉联Java Web服务器榜首。但新手常陷入三大误区: 直接使用IDE内置Tomcat导致生产环境配置失准权限配置不当引发安全漏洞内存参数未优化造成性能瓶颈 本…

Linux中安装MySQL

检查是否有MySQL服务并卸载 检查并卸载 在安装MySQL数据库之前,我们需要先检查一下当前Linux系统中,是否安装的有MySQL的相关服务(很多linux安装完毕之后,自带了低版本的mysql的依赖包),如果有&#xff0c…