数据结构2:线性表

educoder数据结构与算法 线性表 第2关:实现一个链接存储的线性表 任务描述 本关任务:完成一个链接存储的线性表的小程序。 相关知识 线性表的存储也可以采用链接存储方式来实现。链接存储方式包括单链表、双链表和循环链表等形式。 下面描述了一种基于单链表的线性表实现方案: 为了讨论简单,假设数据元素的类型为整型: typedef int T; 在链表中,每个数据元素为一个链表结点,结点的具体定义为: struct LinkNode { T data; LinkNode* next; }; 如上面的单链表示意图所示,一个链表主要有front 阅读详情

线性结构的特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,每个数据元素都有一个前驱和后继。

可以想象一下糖葫芦。

线性表的顺序存储(顺序表)的基本定义:

#include<stdio.h>
#include<iostream>
using namespace std;
#define MAXSIZE 100  //一般元素个数不超过100,所以最大值定义为100
typedef struct
{
    ElemType *elem; //存储空间的基地址,也就是第一个元素存储的地址,可以理解为数组名。
    int length;//当前长度
}Sqlist;
int main()
{
    ....
}

线性表顺序存储也就是顺序表,可理解为数组。

顺序表的初始化:构造一个空的顺序表。

#include<stdio.h>
#include<iostream>
using namespace std;
#define MAXSIZE 100  //一般元素个数不超过100,所以最大值定义为100
typedef struct      
{
    ElemType *elem; //存储空间的基地址,也就是第一个元素存储的地址,可以理解为数组名。
    int length;//当前长度
}Sqlist;

int InitList(SqList &L)      //初始化      // & 是C++中的 引用 操作符 
{
    L.elem=new ElemType[MAXSIZE];  //用new给L.elem分配了相当于ElemType[MAXSIZE]一样大的空间.
    if(!L.elem) exit(0)
    L.length=0;
    return 1;
}

int main()
{
    Sqlist L; 
    InitList(L); // 给L.elem分配空间。
    ...
}

new函数用法: 动态分配空间, 分配的空间大小是 new 后面给出的数据的大小; 

 &: 相当于 *  但是比指针更加方便,可以直接用&来调用某个数据。比如  SqList &L, 就是可以直接对L进行操作。

线性表的链式存储:

单链表的定义:

#include<stdio.h>
#include<iostream>
using namespace std;
typedef struct LNode
{
    Elemtype data;   // 数据域
    struct LNode *next; //指针域    
}LNode,*LinkList;   // *Linklist 是指向LNode类型的指针。

单链表采用了递归定义,因为指针域所指向的类型就是单链表的一个结点。

 

单链表就是用指针将这样一个个相同的结点链接起来,为了方面操作,额外定义一个头指针,指向头结点。

下面的内容可以很轻松的让你理解数组和链表   摘自 《算法详解》:

 

 

 

 

 

 

 


线性表的基本操作有:插入,删除,合并,排序,查找。 所有复杂的操作都是由这些基本的操作组合成的。

下面只给出一个样例:

例:合并两个的单链表:

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的空间,不另外占用其他的存储空间,表中允许有重复的数据。

int MergeList(LinkList &LA,LinkList &LB,LinkList &LC)

{
    LinkList pa,pb,pc;
    pa=LA->next;
    pb=LB->next;
    pc=LA;  //以LA作为新链表的头指针
    while(pa&&pb){
        if(pa->data>pb->data){
            pc->next=pa->data;
            pc=pa;
            pa=pa->next;
        }

        if(pa->data<=pb->data){
        
            pc->next=pb->next;
            pc=pb;
            pb=pb->next;
        }
    }
    pc->next=pa?pa:pb;
    delete LB;
    return 1;
}

 

 

 

 

【数据结构】2话:线性表1 笔记整理 阅读详情

相关推荐

【数据结构】3话:线性表2

笔记整理

m0_73973059的博客 393

【数据结构学习】2.线性结构之线性表

线性结构的基本特点是除第一个元素无直接前驱、最后一个元素无直接后继之外,其他每个数据元素都有一个前驱和后继。【像一个线段一样,有头有尾的排排坐】

m0_51692337的博客 788

树莓派4B保姆级教程:从零配置Python虚拟环境到PySide2开发全流程(含避坑指南)

本文提供树莓派4B上配置Python虚拟环境及PySide2 GUI开发的完整教程。针对armv7l架构的特殊性,详细讲解了从系统准备、虚拟环境创建到PySide2安装的避坑指南,并重点解决了跨平台UI文件处理等常见难题,帮助开发者构建稳定高效的开发环境。

9q8w7e6r5的博客 822

《数据结构》| 第二章 线性表

Table of Contents(了解)学数据结构在学什么? (了解)学数据结构在学什么?

KeepCodeing 446

lstm如何输入多维序列_深度学习也可以做时间序列异常诊断

最近在看的一篇论文里,用到了GRU、VAE等技术来做多维时间序列异常诊断。那么今天首先来聊一聊深度学习的基础知识,然后简单说一下论文。以下基础知识部分的内容,主要来源于李宏毅老师的课程。有兴趣的可以去看李老师的课程哦https://www.bilibili.com/video/BV1JE411g7XF?p=1 1、GRU(Gate Recurrent Unit):GRU是循环神经网络(Recurr...

weixin_30899789的博客 2833

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 752

指针学习八——二分法查找

数组名作为函数的参数 在主函数中,数组名a[ ]作为函数Bsearch的实参,在函数Bsearch中访问数组a的存储单元,既可以引用,又可以改变单元的内容,返回主函数后,数组元素的值就改变了。 *p相当于a[ ]; p[mid] 可改写为*[p+mid]。 #include<stdio.h> //二分查找 int Bsearch(int *p,int n,int x);...

超人琪的博客 895

基于OSPF技术的某企业网络设计(完整文档+ENSP拓扑图)

主要对网络规划与设计,以企业网络为背景,对某个中型企业网络进行规划设计,该企业总部在南京,在常州有一个分公司,需要实现总部和分公司能够访问外网,能够让分公司内的用户或主机访问总部服务器的资源,并且保证数据的安全性。在这次总部企业网络设计中,考虑到资金的问题,核心层部署2台核心三层交换机,负责转发总部内部用户的流量,并充当内部用户网关,能够实现内部不同网段的用户之间的连通性。对于一些对网络比较敏感的企业或用户,对网络的要求较高,对于网络的稳定性和安全性也有较高的要求。

qq1325513482的博客 2万+

零基础深度学习35天实战路线图:从手算矩阵到PyTorch部署

深度学习并非高不可攀的黑箱,而是数学建模、数值计算与系统工程的有机融合。理解梯度下降如何映射为optimizer.step()、矩阵乘法如何对应张量操作,是突破入门瓶颈的关键。本文以PyTorch为核心框架,围绕神经网络训练全流程,系统拆解从标量求导、NumPy手算梯度,到自动微分、CNN构建、ONNX导出及Flask服务部署的技术链条。强调数学直觉(如交叉熵的惩罚机制、卷积的边缘检测本质)与工程实践(显存监控、NaN排查、DataLoader调优)的双重落地,覆盖零基础学员最常卡点:环境配置、维度匹配、G

weixin_34186128的博客 458

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程

本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。

weixin_29233333的博客 502

扩散模型中的UNET

一、为什么UNET模型可以用于去噪网络 二、扩散模型中的UNET是一个条件去噪网络,怎么实现的 三、UNET用于分割和用去去噪的区别

m0_37737957的博客 3816

实训C++语言设计——接受两个非递减的线性表,并将它们合并为非递减的Lc

平台:VC++ 2005 测试通过!.vcproj这是使用应用程序向导生成的 VC++ 项目的主项目文件。 它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。StdAfx.h, StdAfx.cpp这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。这些都是使用应用程序向导

大师的资源 2447

【我的Android进阶之旅】Android自定义View实现一个游戏摇杆,来实现监听遥动的方向或者监听摇动的角度的功能

一、需求描述 去年有个需求,需要使用自定义View实现一个游戏摇杆,来识别上下左右摇动的方向。 有点类似下面这样的王者荣耀游戏摇杆的效果 二、业界已有的参考资料 在下面这篇博客介绍了如何自定义游戏摇杆 2.1 博客介绍 Android自定义摇杆 2.1.1 功能 支持自适应大小 支持2个方向、4个方向、8个方向的摇动监听 支持摇动角度获取 可选回调模式 支持可摇动区域自定义 支持摇杆自定义 支持设置图片、色值、Shape图形 2.1.2 效果图 2.1.3 设置回调方式 setCallBac

字节卷动 1409

数据结构 第2章:线性表

线性表:是具有相同数据类型的 n 个数据元素的有限序列。特点:存在惟一的第一个元素。存在惟一的最后一个元素。除第一个元素之外,每个元素均只有一个直接前驱。除最后一个元素之外,每个元素均只有一个直接后继。线性表的存储结构:顺序存储结构:顺序表链式存储结构:链表。

zzzzzyliu的博客 1240

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据结构:2. 线性表

网上课程学习,关于线性表的一些笔记

2301_80099382的博客 896

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构2:线性表1-线性表类型及其特点

线性表最常用的数据结构之一,在实际应用中有着很多的应用,例如在操作系统中的各种链表以及数据库中的结构等。线性表(LIST)的定义如下:零个或多个数据元素的有限序列。从定义中可以看出线性表中的数据元素可以有零个,也可以有很多个,但总是有限的;数据元素与数据之间并不是无序的,而是有序的。除去第一个元素无前驱,最后一个数据元素无后继,每个数据元素如图所示。

weixin_43358703的博客 834

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数据结构笔记2:线性表

Table of Contents 线性表定义: 线性表基本操作: 线性表顺序表示: 顺序表定义 顺序表基本操作: 插入 删除 按值查找 线性表链式表示: 单链表定义 单链表操作 特殊链表 顺序表与链表比较 三个常用操作:最值、逆置、归并 题目: 线性表定义: 定义:数据元素类型相同,序列(有先后)有限。抽象性,逻辑结构-一对一的相邻关系 除了首尾结点,其他都有前驱后继 线性表基本操作: InitList(&L)初始化:创建空表(参数为引用类型) Destr

越开源越幸运 1066

【数据结构导论】第 2 章:线性表

线性表是一种常见的数据结构,它由一组相同类型的元素组成,其中每个元素都有唯一的前驱和后继元素。线性表的实现方式有很多,链表和数组是两种常见的实现方式。

顾三殇 —— 博客空间(软件测试) 2784

[入门必看]数据结构2.2:线性表的顺序表示

数据结构2.2:线性表的顺序表示

m0_58991879的博客 484

头歌平台数据结构与算法 线性表 第2关:实现一个连接存储的线性表

头歌平台教学课堂-《数据结构》实训作业

qq_63924481的博客 6391

第2章:数据结构:线性表

线性表(数据结构) 表 顺序表 链表 方式 随机存取 顺序存取 查找 O(1) O(n) 删除 54\frac {5}{4}45​ ∑i=0n\sum_{i=0}^n∑i=0n​ 插入

Walker 159

数据结构学习(2):线性表

通俗点讲,线性表就像是用一条线把元素们穿起来,像是小朋友排队一般按顺序排列好。。上篇中我们介绍了:把所以线性表就是一种数据结构,它给出了数据元素之间的一种,即数据元素之间是线性的有前后联系的。这里数据元素可以是一个int类型的数字,也可以是具有多个数据项的抽象的”人“,例如,上学时一个班有50名同学,每名同学都有自己的姓名、性别、家庭住址,这些个人信息可以理解为“数据项”,按照一次考试的成绩由高到低(不考虑并列)给这些同学排序,生成一个显示同学们个人信息的“信息单”,这个信息单就是一个线性表。

m0_62546127的博客 631

数据结构笔记2: 线性表

基本概念 线性表是n个数据元素的有限序列,同一线性表中的元素一定要有相似性 不在意元素之间的具体数据,而在意元素之间的关系 线性表操作:创建、判断是否为空、确定长度、查找、删除、插入 数组描述(顺序存储) C++类定义 template<class T> class LinearList{ public: LinearList(int MaxListSize=10); //构造函数 ~LinearList(){delete[] eleme.

Roslin_v的博客 273

数据结构3——线性表2:线性表的顺序结构

线性表的顺序结构基本理解,线性表销毁、清空、查找、定位、插入、删除等C/C++实现

m0_61787307的博客 811
上一篇: 数据结构1: 基础定义
下一篇: 数据结构3:栈和队列
Androids_lost_Sheep
博客等级 码龄8年 1022粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值