数据结构-线性表

数据结构线性表的构建 数据结构线性表的构建 创建名为线性表的空项目,在创建的线性表中创建线性表cpp文件,之际按c文件的格式写代码即可。 首先要在开头添加两个头文件: #include <conio.h> (不然,getch()没有定义) #include <windows.h> 然后,因为clrscr()在vs中没有提供,所以我们采用以下代码来说明,需要与#include <wi... 阅读详情

数据结构-线性表

Part1-基础知识
  1. 线性表定义: 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列,n为表长;

     表示为 L = (a1,a2,a3......an)
    
  2. 特点

    • 个数有限
    • 具有逻辑上的先后次序
    • 数据类型都相同,每个元素占用相同大小的存储空间
  3. 顺序表的定义: 线性表的顺序存储又称顺序表。是用一组地址连续的存储单元依次存储线性表中的数据元素,使得元素在逻辑和物理上都相邻

  4. 描述-数组静态分配

#define MaxSize 50
typedef struct{
    Elemtype data[MaxSize];
    int length;
}SqList;
  1. 描述-数组动态分配
#define InitSize 100
typedef struct{
    ElemType *data;
    int MaxSize,length; //最大容量与当前个数
}SqList;
Part2-顺序表的基本操作
  1. 插入: 第i个位置插入元素e; 时间复杂度O(n)
bool ListInsert(SqList &L,int i,ElemType e){
    if(i<1 || i>L.length+1) return false; //判断i是否有效
    if(L.length >= MaxSize) return false; //存储空间已满
    for(int j = L.length;j >= i;j--){    // 第i个元素后移
        L.data[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length ++;
    return true;
}
  1. 删除: 删除第i个元素; 时间复杂度O(n)
bool ListInsert(SqList &L,int i,ElemType &e){
    if(i<1 || i>L.length+1) return false; //判断i是否有效
    e = L.data[i-1];
    for(int j = i;j < L.length;j++){    // 第i个元素后移
        L.data[j-1] = L.data[j];
    }
    L.length ++;
    return true;
}
  1. 按值查找: 第一个元素为e的元素,并返回位置; 时间复杂度O(n)
int LocateElem(SqList L,ElemType e){
    for(int i = 0;i < L.length; i++){
        if(L.data[i] == e){
            return i+1;
        }
    }
    return 0;
}
Part3-单链表
  1. 线性表的链式存储又称单链表,
typedef struct LNode{
    ELemType data;
    struct LNode *next;
}LNode,*LinkList;
  1. 通常用头指针标识一个单链表,在单链表第一个节点之前附加一个节点,称为头结点。
  2. 头插法建立单链表; 时间复杂度O(n)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tBxgvx6d-1601395188994)(https://img-blog.csdnimg.cn/img_convert/11123ae14530541e72d82e2d3b3a4218.png]
    )
LinkList List_HeadInsert(LinkList &L){
    LNode *s;
    int x;
    cin>>x;
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    while(x!=-1){      //输入 -1 结束
        s = (LNode *)malloc(sizeof(LNode));
        s->data = x;
        s->next = L->next;
        L->next = s;
        cin>>x;
    }
    return L;
}
  1. 尾插法建立单链表; 时间复杂度O(n)
LinkList Link_LastInsert(LinkList &L){
    int x;
    L = (LinkList)malloc(sizeof(LNode));
    LNode *s,*r = L;
    cin>>x;
    while(x!=-1){
        s = (LNode *)malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        cin>>x;
    }
    r->next = NULL;  //尾指针置空
    return L;
}
  1. 按序号查找节点值; 时间复杂度O(n)
LNode *GetElem(LinkList L,int k){
    int i = 0;
    if(k == 0) return L;
    if(k < 1) return NULL;
    LNode *s = L->next;
    while(i<k && s){
        i++;
        s = s->next;
    }
    return s;
}
  1. 按值查找; 时间复杂度O(n)
LNode *LocateELem(LinkList L,int value){
    LNode *p = L->next;
        while(p->data != value&&p){
            p = p->next;
        }
    return p;
}
  1. 插入节点: 值为x的节点插入到第i的位置,即第i-1个节点
p = GetElem(L,i-1);    //查找插入位置的前驱节点
s->next = p->next;
p->next = s;
  1. 删除节点: 将第i个节点删除
p = GetElem(L,i-1);
q = p->next;
p->next = q->next;
free(q);
Part4-双链表
  1. 为了克服单链表访问前驱节点的麻烦,引入双链表,双链表中有两个指针prior和next,分别指向前驱和后继
    ![avator](https://img-blog.csdnimg.cn/img_convert/56c019af7f72dc65dad7cc9d7b79e2f0.png
    )
typedef struct DNode{
    ElemType data;
    struct DNode *prior,*next;
}DNode,*DlinkList;
  1. 插入
s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-olcxjeXx-1601395309024)(https://img-blog.csdnimg.cn/img_convert/5e6336c40847b16e9a0d13b61ef899b4.png]
)
3. 删除

p->next = q->next;
q->next->prior = p;
free(q);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOin99Dy-1601395334108)(https://img-blog.csdnimg.cn/img_convert/0aaf72a14e4d2c67a16b925f7b992476.png]
)

Part5-循环链表
循环单链表
  1. 循环单链表与单链表的区别: 表中最后一个节点的指针不是NULL,而改为指向头结点,从而链表形成一个环; 由于表尾节点*r的next域指向L,故表中没有指针域为NULL的域
    avator
循环双链表
  1. 循环双链表中头结点的prior指针还要指向表尾节点
    avator
王道数据结构线性表基本操作实现 #include<iostream> using namespace std; //#define MaxSize 50 //线性表最大长度 #define InitSize 100 //表长度初始定义 typedef int ElemType; //typedef struct { // ElemType data[MaxSize]; ... 阅读详情

相关推荐

数据结构——线性表的插入

/*顺序表的插入 利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31} 然后在第i个位置插入元素68。 注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序 本程序实现的是在第i个元素之前插入新的元素(顺序表中元素的次序)的区别。*/

3521

数据结构线性表题库

网络课课后题 1、下面关于线性表的叙述中,正确的是 A、线性表采用顺序存储,必须占用一片连续的存储单元。 B、线性表采用顺序存储,便于进行插入和删除操作。 C、线性表采用链接存储,不必占用一片连续的存储单元。 D、线性表采用链接存储,便于插入和删除操作。 解析 顺序存储是按索引值从小到大存放在一片相邻的连续区域 采用链接存储,便于插入和删除操作,如果采用顺序存储,插入和删除时需要...

闲狗的博客 1万+

人工智能的未来:从弱 AI 到通用人工智能(AGI)

从最初的简单自动化程序,到如今的深度学习大模型(如 ChatGPT、DeepSeek、Grok),AI 逐步从弱人工智能(Weak AI)向更智能、更自主的方向发展。AI 的发展将影响就业市场,取代重复性、低技能的工作,同时创造新的高技能岗位。尽管深度学习带来了巨大的进步,但它仍然依赖大量标注数据进行训练,对新环境的泛化能力有限,这也是当前 AI 迈向 AGI 的关键障碍之一。本文将探讨 AI 从弱 AI 进化到 AGI 的可能性,分析目前 AI 技术的局限性,并展望未来 AI 在各个行业的影响。

qq_20245171的博客 1万+

数据结构篇——线性表

线性表的定义:用数据元素的有限序列表示。具体情况如下图所示:线性表的几个特点如下:①只有一个首结点和尾结点;② 除首尾结点外,其他结点只有一个直接前驱和一个 直接后继。Tips:线性结构反映结点间的逻辑关系是 一对一 的。线性结构包括线性表、堆栈、队列、字符串、数组等。

2301_79702677的博客 1570

STM32+ESP8266接入OneNet物联网平台全流程

MQTT协议是物联网设备与云平台通信的主流轻量级消息传输标准,其发布/订阅模型天然适配嵌入式资源受限场景;OneJSON作为中国移动OneNet平台定制的数据格式,在标准JSON基础上精简Schema、降低解析开销,显著提升STM32等MCU的处理效率。该技术组合兼顾安全性、低功耗与工程可量产性,广泛应用于环境监测、智能仪表、工业传感器等远程数据采集系统。实际落地需协同完成云平台物模型定义、Token动态认证、MQTT Topic严格构造、AT指令可靠交互及单总线传感器数据融合等关键环节。本文以DS18B2

u5v6w7的博客 1120

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 659

数据结构之线性表

线性表是数据结构中最基础且常用的一种结构,它是由一组具有相同类型的元素组成的有序序列。线性表可以通过顺序存储或链式存储来实现。本文将重点介绍顺序存储的线性表,并通过C语言代码来展示其基本操作。data:指向存储元素的数组。size:当前线性表的大小(即元素个数)。capacity:线性表的最大容量。int *data;// 存储元素的数组int size;// 当前大小// 最大容量} List;顺序存储的线性表是一种简单且高效的数据结构,适用于元素数量相对固定且需要频繁访问的场景。

m0_74091276的博客 1227

如何使用安路TD与Modelsim进行联合仿真?

1)安装安路FPGA开发软件;(本次实验使用版本:TD_5.6.3_Release)2)安装Modelsim仿真软件;(本次实验使用版本:Modelsim SE-64 10.1c)3)FPGA开发板;(本次实验使用型号:EG4X20BG256)4)LED点灯例程;

qq_17313923的博客 3214

数据结构 线性表

其中,数组实现的线性表具有随机访问的优势,可以通过索引直接访问元素,而链表实现的线性表具有动态插入和删除的优势。哈希表:哈希表是一种基于数组的线性表,通过哈希函数将关键字映射到数组的索引位置,用于高效地查找、插入和删除元素。链表:链表是一种链式存储的线性表,适用于频繁插入和删除元素的场景。这些只是线性表在各个领域中的一些应用示例,实际上线性表作为一种基础数据结构,几乎在所有计算机科学和软件开发的领域中都有广泛的应用。,并实现了初始化、获取长度、判断是否为空、获取元素、插入元素、删除元素和输出线性表的函数。

qq_52847866的博客 1777

告别设备管理器混乱!3分钟学会用STM32CubeMX+Zadig定制专属虚拟串口名称

本文详细介绍了如何利用STM32CubeMX和Zadig工具,为STM32的USB虚拟串口(VCP)定制专属设备名称,从而彻底解决多设备连接时设备管理器端口混乱的难题。通过修改产品字符串描述符并替换驱动,开发者可以在设备管理器中清晰识别不同开发板,显著提升调试效率,尤其适用于多设备协同的竞赛或项目开发场景。

a2b3c4d5e的博客 478

AutoSAR系列讲解 - 总目录

博主想在开始前先讲一下我们的具体安排,这里就以目录加说明的形式展示出来,同时这也可以作为大家学习AutoSAR的参考。由于实践篇需要在很久以后才会更新,所以这里我们先罗列一下理论篇的内容,实践篇等开始更新的时候我再补充上

雪云飞星的博客 49万+

JAVA数据结构——线性表

线性表是典型的数据结构之一,Java API支持多种数据结构,利用集合框架进行具体实现。本文将剖析这些数据结构是如何实现的。

NJfunkGiser的博客 880

C#上位机实战:手把手搭智慧工业数字孪生系统,从设备建模到实时联动全落地

字段长度(字节)说明起始标识2固定为0xAA55,用于判断数据包开始设备ID4唯一标识设备(比如1001代表电机1)数据类型10=布尔(启停),1=浮点数(转速/温度)数据长度4数据字节数(布尔1字节,浮点数4字节)数据内容N实际数据(按数据长度读取)校验位1前面所有字节的异或校验,防止数据篡改结束标识2固定为0x55AA,用于判断数据包结束。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 967

数据结构——线性表

(2)当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。2,有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。(2)链式,数据存放的存储单位是随机或任意的,可以连续也可以不连续。(1)顺序存储,数据存放在连续的存储单位中。1,输入,输出特性,输入时可选的,输出时必须的。

wxy319的博客 1358

基于 Verilog 的经典数字电路设计(10)三态门

三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

新芯设计的博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【数据结构】线性表的顺序存储

💯线性表是具有相同类型的数据类型的n个数据元素的有限序列,其中n为表长,n0n=0n0时为空表ege.geg这里要注意的是,定义中描述的为数据元素,而非数据项,也就是,存储单元可以是一个结构体,而数据项为里面的成员✨线性表的特点:表中元素的个数为有限个表中元素具有逻辑上的顺序性,表中元素有其先后顺序表中元素都是数据元素,每一个元素都为单个元素表中元素的数据类型都相同,每个元素占相同的内存空间表中元素具有抽象性,即仅讨论元素之间的逻辑关系,而不考虑具体实现方式🔑。

DAY I 的成长之路 5012

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据结构 线性表 插入 删除

数据结构线性表的插入,删除 任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入、删除与查找等功能。 相关知识) 线性表是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。具体实现时,线性表可以采用不同的存储策略。下面给出了一种基于顺序存...

mmmm0303的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【数据结构】线性表

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。它主要研究的是数据的逻辑结构、存储结构以及在这些结构上定义的运算。逻辑结构描述了数据元素之间的逻辑关系,比如线性结构、树形结构、图状结构等。存储结构则关注数据元素及其关系在计算机存储器中的存储方式,常见的有顺序存储、链式存储等。通过合理地选择和运用数据结构,可以更高效地解决实际问题,提高程序的运行效率和性能。线性表是由n(n≥0)个具有相同类型的数据元素组成的有限序列。

Guiat的博客 1124

数据结构—线性表

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列,每个数据元素可能会有多个数据项。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,...

the_sea1的博客 284

【数据结构中的线性表】

在编写本篇博客时,学校正要进行期末考试,花费的时间比较长,内容很多,还望耐心看完!线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

Z15255808023的博客 1007

数据结构:线性表

由n(n≥0)个具有相同特性的数据元素组成的有限序列。有序性:元素之间存在明确的先后顺序,第一个元素无前驱,最后一个元素无后继,其余元素有且仅有一个前驱和一个后继(如数组[1,2,3]中,2的前驱是1,后继是3)。同质性:所有元素属于同一数据类型(如整数列表、字符串列表)。有限性:元素个数n为非负整数,当n=0时称为“空表”。线性表是现实世界中“序列关系”的抽象,例如学生点名册(按学号排序)、购物清单(按添加顺序)等均符合其特征。

梁辰兴的博客 1038

数据结构线性表源码

蒟蒻的我,今天折腾了3个小时,终于把数据结构的线性表源码,用C语言写出来了,qwq 数据结构线性表源码 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #define cmax 30 struct Sqlist { int data[...

乐褀的博客 702
上一篇: 数据结构-chap1绪论
下一篇: Java-反射
广州彭于晏
博客等级 码龄8年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值