数据结构线性表(一)

数据结构(C语言版)实验一 线性表 C语言数据结构实验一 **实验要求:实验目的: 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; 阅读详情

数据结构之线性表(一)

线性表
  • 是数据结构中最简单且常用的一种结构

  • 它由相同的数据类型的n个元素组成的有限序列

  • 按照存储结构,可以分为 顺序表和链表两种

    顺序表

    主要特点是可以进行随机访问,可以通过表头元素的地址和元素的下标在O(1)的时间复杂度找到指定元素,主要介绍***构造,插入,扩容,查找,删除,遍历***这些操作

    • 特点 顺序表是用一组地址连续的储存单元依次存储数据元素,元素在逻辑和物理位置上是相邻的
    • 缺点: 插入和删除要移动大量的元素从而保持逻辑和物理上的连续性.
    • 构造顺序表

      1. 定义顺序链表的构造体类型

        typedef struct Vector {
        	int size,length; //size用来存链表的大小,length存元素的长度
        	int *data;//data指针用来指向内存上开辟的空间.
        }Vector
        
        1. 初始化顺序链表被在堆上为其分配空间

          void init(Vector *vector,int size) {
              vector->size = size;
              vector->length = 0;
              vector->data = (int *)malloc(sizeof(int)*size);//data指针指向malloc开辟的size个int类型的内存空间
          }
          
          int main() {
              Vector *a = (Vector *)malloc(sizeof(Vector));//定义一个Vector类型的a指针,并为他指向一个Vector类型的内存空间.
              init(a, 100);//初始化a让其data数据域有100个int的大小.
              
              return 0;
          }
          

          3.当用完顺序链表别忘了清除,小心内存泄漏

          void clear(Vector *vector) {
              free(vector->data);//释放data数据域
              free(vector);//别忘记释放vector指针
          }
          
          int main() {
              Vector *a = (Vector *)malloc(sizeof(Vector));//定义一个Vector类型的a指针,并为他指向一个Vector类型的内存空间.
              init(a, 100);//初始化a让其data数据域有100个int的大小.
              clear(a);//释放a及他的数据域;
              return 0;
          }
          
          
          1. 插入操作咳咳

            话不多说直接上代码

            int insert(Vector *vector, int loc, int value) {
            if (loc < 0|| loc > vector->length) {
              return -1;//如果插入太短小,或者超过了元素总长,错误
            }
            if (vector->length >= vector->size) {
              return -1;//如果元素已满,无法插入
            }
            for (int i = vector->length; i > loc; --i){
              vector->data[i] = vector->data[i-1];
              //插入的时候要从后往前移动元素;
            }
            vector->data[loc] = value;//移到插入点loc,更新data[loc]
            vector->length++;
            return 0;
            }
            
            
          2. 顺序链表的扩容(当当前元素满了==size的时候,扩容)

            • 思路:我们要定义一个指针存存放(指向)旧的数据域,然后再利用malloc函数开阔一个更大的数据域,最后将就数据域上的数据存到新开辟的数据域上

              void expend(Vector *vector) {
                  int *old_data = vector->data;//赶紧存旧的地址,里面有我们是数据;
                  vector->size = vector->size*2;
                  vector->data = (int *)malloc(sizeof(int)*vector->size);
                  //这时候数据域指针更新了,我们有了一个更大的空间
                  for(int i = 0; i < vector->length; i++) {
                      vector->data[i] = old_data[i];
                      //把我们原来的数据放到新的内存空间里;
                  }
                  free(old_data);
                  //清理原来的数据域,避免内存泄漏了;   
              }
              
          3. 顺序链表的查找,删除和遍历的算法流程

              1. 查找

                代码实现 (暴力找盆友,一个一个往后找就VANS了)

                int search(Vector *vector, int value) {
                for(int i = 0; i < vector->length; ++i) {
                  if(vector->data[i] == value)
                      return i;
                }
                	return -1;//找了一圈没找到直接爆炸;
                }
                
              1. 删除

                代码实现 (先判断合法否,然后直接让删除下标后面的元素往前挪)

                int delete_node(Vector *vector, int index) {
                if (index < 0 || index >= vector->length){
                  return -1;//不合法直接-1;
                }
                for (int i = index+1; i < vector->length; ++i) {
                  vector->data[i-1] = vector->data[i];//index位置后的元素前移一格.
                }
                vector->length--;
                return 1;  
                }
                
              1. 遍历

                遍历不用爷多说了吧,按顺序表的存储顺序依次输出元素

                void print(Vector *vector) {
                for (int i = 0; i < vector->length; ++i) {
                  i!=0 && printf(" ");
                	printf("%d", vector->data[i]);//输出元素data[i];
                }
                }
                

总结 : 以上是线性表中顺序链表的基本操作,顾名思义啊,顺序表就是数据的存储单元是连续的,按顺序来的,下一节我们学习链表的基本操作.

自动驾驶仿真:Carsim、NI和VTD联合仿真课题二 文章目录前言一、设备配置1、硬件需求2、网络配置二、Carsim工程配置1、创建工程2、创建数据库3、参数配置三、VTD工程配置1、创建工程四、Veristand工程配置1、创建工程五、运行程序 前言 上篇文章《Carsim、NI和VTD联合仿真课题一》简单地介绍了三者之间的联合框架,以及NI与VTD之间简单的组包与拆包指导。这篇文章将要讲述的是如何将三个软件联合起来,如何设置软件参数,用最简单的方法把仿真车开起来。 一、设备配置 1、硬件需求 注:真正的做智能驾驶仿真项目,至少需要两台电脑,一台实时机 阅读详情

相关推荐

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,内容为 hdaudioC0D2: unable to configure disabling ,这里是记录了报错的解决全过程

qq_48717745的博客 989

简单数据结构(一)线性表

最简单的结构:线性表 先进先出的结构:队列 先进后出的结构:栈 线性表 线性表数据结构具有以下特征: 有且只有一个“首元素” 有且只有一个“末元素” 除末元素之外,其余元素均有惟一的后继元素 除首元素之外,其余元素均有惟一的前驱元素 对于线性表,主要可进行以下操作: ...

a361445613的博客 349

搜索引擎——ElasticSearch汇总

汇总——ElasticSearch篇 全文检索 问题1:什么是全文检索? 基本概念:对**非结构化数据/结构化数据**先建立**索引**,再对索引进行搜索**文档**的过程叫做全文检索。 什么是非结构化与结构化数据? - 非结构化数据:没有固定的格式的数据(html,word,excel)---没有固定长度,字段约束,描述,散列数据 - 结构化数据:有固定的格式的数据(如:数据库数据)---有固定长度(varchar(50)),字段类型,描述修饰数据 搜索算法:顺序扫描法、倒排索引法 - 顺序

alonewolf_99的博客 1838

C# 数据结构- 线性表的几种实现

什么是线性表 线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系,即: ( 1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素; ( 2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是一个接一个的排列。...

路漫漫其修远兮 2552

从零构建智能ai语音助手:ESP32s3+Python+大语言模型实战指南

本文详细介绍了基于ESP32S3硬件和Python后端的智能语音助手系统开发指南。系统采用ESP32S3采集语音,通过WebSocket实时传输到Python后端处理,利用大语言模型实现自然语言理解和意图识别,再通过TTS合成语音返回。文章从系统架构、工作流程、技术实现(包括OPUS编码、WebSocket通信、ESP32音频处理)等方面进行了详细讲解,并提供了分阶段学习路线和常见问题解决方案。该项目展示了物联网技术与AI技术的融合应用,相比传统语音系统具有更高的灵活性和智能性,为开发者提供了完整的实现方案

Despacito0o的博客 2629

(数字ic验证)从零开始的apb_watchdog验证模块搭建(一、功能介绍与环境搭建)

apb_watchdog验证模块搭建(一)文章目录 文章目录apb_watchdog验证模块搭建(一)文章目录前言一、apb_watchdog简单功能介绍二、测试平台环境搭建1.测试所用模板介绍2.tb与interface2.env与watchdog_pkg3.test与base_sequence4.Makefile总结——当前验证结构 前言 本文介绍了apb_watchdog验证模块的搭建过程与其具体代码,主要包括其中验证环境的构建,测试序列的发送与回归测试收集。主要运用systemvorilog与u

peop1e的博客 9736

数据结构之线性表实现【详解】

线性表(Linear List) 线性表的概念 线性表是最基本、最简单、也是最常用的一种数据结构。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。 在数据结构逻辑层次上细分...

王木木 579

【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (下篇)(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1116

数据结构--线性表详解(一)

这里写链接内容1、前言 线性表是最常用且是最简单的一种数据结构。形如:A1、A2、A3….An这样含有有限的数据序列,我们就称之为线性表。2、线性表的两种表示形式 顺序表示(其实就是数组) 链表表示(本博客重点将重点介绍的部分) 3、线性表一般操作的介绍 线性表一般包含如下几种操作:线性表的操作包括如下几种 (1) InitList(& L) //构造一个空的线性表

William 5万+

【异常】安装hermes-agent时提示GnuTLS recv error (-110): The TLS connection was non-properly terminated.

Git克隆仓库时出现TLS连接异常报错的解决方案摘要: 当执行git clone命令时遇到"GnuTLS recv error (-110)"报错,通常由网络不稳定、缓冲区不足或证书验证问题导致。主要解决方案包括:1)增大Git HTTP缓冲区(git config --global http.postBuffer 524288000);2)使用GitHub镜像站加速克隆;3)临时禁用SSL验证进行测试;4)检查并调整代理配置;5)改用SSH协议克隆。建议优先尝试增大缓冲区和镜像站方案,

奶爸的编程之路,也就一周冷个三天 1349

Android 人像分割实战:OpenCV+YOLOv8+NCNN 三库联动(附 GPU 加速 / 内存优化全方案)

本文详细介绍了在Android项目中集成OpenCV+YOLOv8+NCNN实现实时人像分割的技术方案。主要内容包括:项目环境搭建(配置NDK、添加Native模块)、核心库文件集成(OpenCV、NCNN、YOLOv8模型)、JNI接口设计与实现(Kotlin层调用C++算法)。通过Camera API获取图像数据,使用YOLOv8进行人体检测,结合NCNN高性能推理框架实现人像分割处理,最终将原始画面与分割结果(背景透明)同时显示在Android界面上。该项目采用多技术栈协同工作,OpenCV负责图像处

FJN110的博客 232

数据结构——线性表实现

头文件(函数声明) sqlist.h typedef int data_t; #define N 128 typedef struct { data_t data[N]; int last; }sqlist, *sqlink; sqlink list_create(); int list_clear(sqlink L); int list_empty(sqlink L); int list_length(sqlink L); int list_locate(sqlink L,data_t v.

weixin_53747689的博客 274

rk3588主板PDM接口接数字MIC录音

本文介绍了Rockchip 3588平台上6麦克风PDM接口的硬件连接与软件调试过程。硬件方面展示了PDM0_CLK0_M0时钟脚和三组数据脚的连接方案。软件配置包括设备树修改,生成声卡节点,并提供了6通道录音命令示例。文章重点分析了两个常见问题:录音无声(需检查供电、接线和波形)和通道数据缺失(需正确配置rockchip,path-map寄存器映射)。最后通过Audition工具验证录音文件,确认各通道工作正常。调试过程完整展现了从硬件连接到软件配置的完整流程。

m0_60805802的博客 1011

重学数据结构(一、线性表)

线性表是最常见也是最简单的一种数据结构。简言之, 线性表是n个数据元素的有限序列。

三分恶的博客 1810

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构(一)线性表

/** *@author StormMaybin *@Date 2016-07-15 */ 每一个成功者都有一个开始。勇于开始,才能找到成功的路。 是时候总结一下数据结构的知识了,总共会分为五篇文章来进行总结一、 概念线性表(Linear_list)是最常用也是最简单的数据结构。简言之,一个线性表是n个数据元素的有限序列。线性表是有线性结构的表。什么是线性结构呢?线性结构是n个数据元素的有序集合

StormMaybin的博客 1527

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java 版 数据结构 (线性表一)

文章目录线性表 线性表 线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列 前驱元素:若A元素在B元素的前面,则称A为B的前驱元素 后继元素:若B元素在A元素的后面,则称B为A的后继元素 ...

QuantumYou的博客 260

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)

线性表的定义线性表:是最常用且最简单的一种数据结构,它是一种线性数据结构,是由类型相同的n个(n≥0)数据元素组成的有序序列。线性表的特点:有且只有一个被称作“第一个”的数据元素,有且只有一个被称为“最后一个”的数据元素。除第一个数据元素之外,其他元素都只有一个前驱,除最后一个数据元素之外,其他元素都只有一个后继。简单的说,其特点是数据元素之间存在”一一对应 (序偶关系)“的关系。好,现在举个例子...

weixin_36374105的博客 450

Java数据结构(一):线性表之开篇

1、线性表 线性结构的特点是除第一个和最后一个数据元素外的每个数据元素只有一个前驱数据元素和一个后继数据元素。线性表是一个最简单的线性结构。线性表的操作特点主要是可以在任意位置插入和删除一个数据元素。线性表可以用顺序存储结构和链式存储结构存储。用顺序存储结构实现的线性表称作顺序表,用链式存储...

144

【数据结构复习】(2)线性表(一)

线性表的定义   线性表是最简单的数据结构,一个线性表是由n个数据元素的有限序列。具有下列特点:     (1)存在唯一一个被称为“第一个”的数据元素;     (2)存在唯一一个被称为“最后一个”的数据元素;     (3)除了第一个之外,集合中的每一个数据元素均只有一个前驱;     (4)除最后一个之外,集合中的每一个数据元素均只有一个后继。 线性表的实现   下面在...

weixin_30708329的博客 217

数据结构(一) 线性表

(一)线性表的定义 线性结构的特点是:在数据元素的非空有限集中,(1) 存在唯一的一个被成为”第一个”的数据元素;(2)存在唯一的一个被成为”最后一个”的数据元素;(3)除了第一个之外,其他的元素均只有一个前驱,除了最后一个以外,其他的元素均只有一个后继 线性表是最常用且最简单的一种数据结构,一个线性表是n个数据元素的有限序列。线性表中的数据元素可以是各种各样的,但是同一个线性表中的元素必定具...

python_tty的专栏 396

数据结构算法代码实现——线性表的定义(一)

线性表的定义 线性表:是最常用且最简单的一种数据结构,它是一种线性数据结构,是由类型相同的n个(n≥0)数据元素组成的有序序列。 线性表的特点:有且只有一个被称作“第一个”的数据元素,有且只有一个被称为“最后一个”的数据元素。除第一个数据元素之外,其他元素都只有一个前驱,除最后一个数据元素之外,其他元素都只有一个后继。简单的说,其特点是数据元素之间存在”一一对应 (序偶关系)“的

编程侯的专栏 2905

【数据结构】一看就会系列之线性表--顺序表(C#语言描述)

目录导航线性表线性表的接口定义顺序表顺序表的实现获得元素的操作插入操作删除操作求顺序表的长度清空操作判断顺序表是否为空判断顺序表是否为满附加操作按值查找顺序表的应用---元素倒置顺序存储结构的优缺点优点缺点 线性表 线性表是最简单、最基本、最常用的数据结构。其结构中的数据元素之间是一对一的线性关系。即:(1)除第一个位置的数据元素外,其他数据元素的前面都只有一个元素 ;(2)除最后一个位置的数据元素外,其他数据元素位置的后面都只有一个元素。 线性表的接口定义 /// 线性表的接口 public interf

他在试图用代码书写这个世界,字里行间温柔尽显。勿忘初心,努力做有价值的技术文章。 1453

数据结构 一、线性表

对于线性表的顺序表示,我只能说简单的一,数据结构不过如此嘛,来的难的打击一下我啊。

weixin_52366487的博客 263

数据结构快速提升(一)----线性表【C++实现】

概述 线性表是最常用且最简单的一种数据结构。简言之,一个线性表是nnn个数据元素的有限序列 线性表中的数据元素可以是各种各样的,但同一线性表中的元素必定具有相同的特性 线性表的是一个相当灵活的数据结构,它的长度可根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可进行插入和删除 线性表的特点: 插入方便 (优点) 空间利用率低 插入、删除麻烦 线性表的顺序表示 线性表的顺序表...

小二笙的博客 1479

数据结构与算法(一)——线性表(上)

作为一名计算机专业的学生,每次查资料的时候发现,很多的资料查阅需要付费而且答案冗长不精炼。于是自己就想着能不能自己写一个免费“合集”,细致的去介绍数据结构与算法。一方面巩固自己的知识。更重要的是,如果可以帮助很多初学者解决问题那么这就是一件有意义的事。这个合集是以Weiss教授的《数据结构与算法分析C语言描述》为蓝本,自己修改了一些章节的学习位置(为了帮助理解),总而言之希望大家看到这篇文章的时候能够解决很多问题。最后一点,由于笔者能力有限,如果出现了一些错误欢迎大家评论区来指正,一起做好这个专栏。

shsbsns的博客 326

实验一 线性表的顺序存储与实现_数据结构 ——线性表的原理及c++程序实现

数据结构 ——线性表的原理及c++程序实现什么是线性表?线性表:由同类型数据元素构成有序序列的线性结构>表中元素个数称为线性表的长度>线性表没有元素时,称为空表>表起始位置称表头,表结束位置称表尾线性表的抽象数据类型描述类型名称:线性表(List) 数据对象集:线性表是 n (≥0)个元素构成的有序序列( a1, a2, …,an ) 操作集:线性表L ∈ List,整数i表示位...

weixin_39861823的博客 698
下一篇: 查找算法之折半查找
OnlyFeiger
博客等级 码龄9年 9粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值