数据结构与算法笔记2(线性表)

2023-11-10

1.线性表

1.1线性表是一种逻辑关系(见绪论)。

1.2定义:是具有相同类型的n个元素的有限序列,其中n为表长,n=0时为空表(关键词:相同类型,一般处理的数据元素都是相同类型,比如一个人那么都是人,而不会把人与车放在一起。关键词:有限序列,必须有限长度,因为计算机无法处理无限个数据。有序,线性表中的每一个元素都是有序号的排列)

1.3表示方法:L = (a1,a2,a3……an) a1为表头元素,an为表尾元素。除表头表尾外所有元素都有前驱结点和后继结点

1.4线性表的特点
1> 表中元素个数有限
2> 表中元素具有逻辑上的顺序性,在序列中各个元素序列具有先后次序
3> 表中元素都是数据元素,每个元素都是单个元素
4> 表中元素的数据类型都相同,所以每个元素占有相同大小的存储空间
5> 表中元素具有抽象性,即讨论元素间一对一的逻辑关系相邻的关系,而不考虑元素究竟表示内容(可以理解为数据结构只管数据的逻辑结构、物理结构、数据运算,数据的逻辑结构只看数据间关系的描述)

1.5线性表是一种逻辑结构,表示元素之间一对一相邻的关系。

1.6线性表逻辑上的九种基本操作(重点)
1> InitList(&L):初始化表。构造一个空的线性表。(&L引用,L线性表)
2> DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
3> LocateElem(L,e):按值查找操作。在表中L查找具有给定值e的元素。(e为值,即找到元素值为e的元素,若有多个则只取第一个)
4> GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。(i在0与表长之间,包括0和表长)
5> ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。(前插,即在第i个元素的前一个位置插入,i在0与表长之间,包括0和表长)
6> ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。(i在0与表长之间,包括0和表长)
7> PrintList(L):输出操作。按前后顺序输出线性表L的有元素值。
8> Empty(L):判空操作。若L为空表,则返回TRUE,否则返回FLASE。
9> Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。

1.7补充几个关系
1> 线性表是逻辑概念,是在计算机内存中以数组的形式保存的线性表。,与之对应的还有树(堆:一种特殊的树)、图。
2> 顺序表、链表都是一种线性表,是线性表以不同的方式实现的。比如顺序表就是顺序存储方式 ,内存中开辟的地址是连续的,而链表采用链式存储的方式,地址是可以不连续的。
3> 顺序存储结构存在的问题:存储空间分配不灵活,运算的空间复杂度高。

二.顺序表

1.基本概念
1> 顺序存储:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

2> 顺序表就是使用顺序存储方式的线性表。

3> 线性表第一个元素的存储位置称为起始位置或者基地址。

4> 优点:由上面的一些概念可知,顺序表一定是占用连续的存储空间。所以一旦知道某个元素的存储位置,我们就可以立刻算出其他元素的存储地址。也就是说顺序表的任一元素都可以随机存取。
例如:当我们知道a1的地址LOC(a1),an的地址为LOC(a1)+(n-1)sizeof(ElemType)

5> 顺序表的实现
顺序表的特点:地址连续、依次存放、随机存取、类型相同。所以可以使用数组来实现,但是顺序表的长度可以改变,而数组的长度一旦确定不可更改。所以可以在加上一个变量用来表示顺序表的长度属性。

#define LIST_INIT_SIZE 100
typedef struct
{
    ElemType elem[LIST_INIT_SIZE];
    int length;
}SqList;

比如对于多项式加减之类的,那么ElemType就是一个结构体类型,里面有指数与系数。

上面一种属于数组的静态分配,还有一种方式,数组动态分配。

typedef struct
{
    ElemType *data;
    int length;
}SqList;
SqList L;
L.data = (ElemType *)malloc(sizeof(ElemType)*MaxSize);

这里使用的malloc函数,当然我们用的C++,可以使用new函数。而且传参时可以用引用等。

三.顺序表的基本操作

1. 插入操作

bool ListInsert(SqList &L, int i, ElemType e)
{
	if(i<1||i>L.length+1)      //输入合法
		return false;
	if(L.length>=MaxSize)   //顺序表未满
		return false;
	int j;
	for(j=L.length; j>=i; j--)
		L.data[j]=L.data[j-1]; //length是长度,在数组中对应下标为length-1.
	L.data[i-1] = e;
	L.length++;
	return true;
}

时间复杂度:O(n)

2.删除操作

bool ListDelete(SqList &L, int i, ElemType &e)
{
	if(i<1||i>L.length+1)      //输入合法
		return false;
	if(L.length==0)             //顺序表为空
		return false;
	e=L.data[i-1];
	int j;
	for(j=i; j<=L.length; j++)
		L.data[j-1]=L.data[j];
	L.length--;
	return true;
}

时间复杂度:O(n)

3.按值操作

int LocateElem(SqList L, Elemtype e)
{
	int i;
	for(i=0; i<=L.length-1; i++)
	{
		if(e==L.data[i]);
			return i+1;
	}	
	return -1;
}

时间复杂度:O(n)

四.单链表

1.定义:线性表的链式存储
2.单链表是通过指针实现线性关系
3.特点:
1>只能实现顺序存取,不可实现随机存取
2>逻辑上是顺序的,存储方式是随机的
4.结点由数据域和指针域组成,用结构体实现

typedef struct LNode
{
	ElemtType data;
	struct LNode *next;	
}LNode,*LinkList;

五.单链表的基本操作

1.头插法建立单链表

LinkList List_HeadInsert (LinkList &L)
{
	LNode *s; 			       //插入结点
	int x;			       //结点的值
	L=(LinkList)malloc(sizeof(LNode));    //申请结点空间
	L->next=NULL;		       //初始化链表		
	
	scanf("%d",&x);		        //头插法建立单链表
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode))
		s->data=x;
		s->next=L-next;
		L->next=s;
		scanf("%d",&x);
	}
	return L;
}

时间复杂度:O(n)

2.尾插法建立单链表

LinkList List_TailInsert (LinkList &L)
{
	int x;			       //结点的值
	L=(LinkList)malloc(sizeof(LNode));    //申请结点空间
	LNode *s; 			       //插入结点
	*r=L;			       //r为尾指针
	scanf("%d",&x);		       //头插法建立单链表
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode))
		s->data=x;
		r->next=s;
		r=r->next;
		scanf("%d",&x);
	}
	r->next=NULL;
	return L;
}

时间复杂度:O(n)

3.按序号查找

LNode *GetElem(LinkList L,int i)  //返回结点指针
{
	int j=i;
	LNode *p=L->next;
	if(i == 0)
		return L;
	if(i<1)
		return NULL;
	while(p&&j<i)	//p非空
	{
		p=p->next;
		j++;
	}
	return p;
}

时间复杂度:O(n)

4.按值查找

LNode *LocateElem(LinkList L, Elemtype e)
{
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e)
		p=p->next;
	return p;
}

时间复杂度:O(n)

5.插入操作
分为前插法和后插法
一般情况下后插法直接队i位置的结点进行如下操作:s->next=ai->next;ai->next=s
而前插法则要先遍历找到i-1结点,在进行上面操作。
不过后插法和前插法的区别就在s结点和ai结点的顺序,所以前插法可以通过使用后插法在改变两者顺序实现。
时间复杂度:O(1)

6.删除操作
一般先遍历到i-1位置在让ai-1->next = ai->next即可
不过可以先改变ai与ai+1位置在删掉i+1位置即可实现
q=p->next;
p->data=p->next->data 交换位置
p->next=q->next 删除
free(q)
q为要删结点
时间复杂度:O(1)

7.求表长

int count = 0;
p=head
while(p->next!=NULL)
{
	count++;
	p=p->next;	
}

时间复杂度:O(n)
引入头结点可以使得操作统一。

六.几种特殊链表

1.双向链表
结点实现

typedef struct DNode
{
	ElemType data;
	struct DNode *prior;
	struct DNode *next;
}DNode, *DLinklist;

插入实现
双链表表尾的插入与表头表中不同,即插入过程不一致。

s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;

时间复杂度:O(1)

删除实现

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

时间复杂度:O(1)

2.循环链表
判空:循环单链表L->next == L;
循环双链表L->next == L;L->prior = L;

3.静态链表
目的:便于在没有指针类型的高级程序设计语言中使用链表结构。
实现:相比单链表把地址改成数组下标,把单链表中指向下一个结点的指针改成下一个结点的下标(称为游标)。
next域存储下一个结点的下标,最后一个结点的next域为-1。用数组描述链表,会预分配一个较大空间,
插入删除都不用移动元素,只需修改游标

#define MaxSize 50
typedef struct DNode
{
	ElemType data;
	int next;
}SLinkList[MaxSize];

七.顺序表与链表对比

1.存储方式
链表只能顺序存取
顺序表可以实现顺序存取和随机存取
2.逻辑结构和物理结构
链表:逻辑相邻物理上不一定相邻,通过指针实现逻辑关系
顺序表:逻辑相邻物理上也相邻,通过相邻表示逻辑关系
3.基本操作
插入&删除:单链表为O(1)(结点指针已知);O(n)(结点指针未知),操作时只需修改指针
顺序表为O(n)修改时需要移动元素
查找:按值查找中单链表和顺序表都为O(n)
按序查找中单链表为O(n),顺序表为O(1)
4.内存空间
顺序存储:无论静态分配还是非静态分配都需要预先分配合适的内存空间(静态分配时预分配空间太大会浪费,太小会溢出;动态分配不会溢出但扩充要大量移动元素)
链式存储:在需要时分配结点空间即可,高效方便,但指针要使用额外空间。
5.怎样选择线性表的存储结构
存储:规模难以估计 单链表
存储密度大 顺序表
效率:频繁按序号访问 顺序表
插入和删除 单链表(因为顺序表需要大量元素移动)
环境:基于数组 顺序表
基于指针 单链表
线性表稳定选顺序表、动态选单链表

八.三种常用操作

最值、逆置、归并
1.最值—顺序表:

int min=L[0];
int max=L[0];
for(int i=0;i<n;i++)
{
	if(L[i]>max)
		max=L[i];
	if(L[i]<min)
		min=L[i];
}

时间复杂度O(n)

最值—单链表:

int min=p->next->data;//p初始化为头结点
int max=p->next->data;
for(;p!=NULL;p=p->next)
{
	if(p->data>max)
		max=p->data;
	if(p->data<min)
		min=p->data;
}

时间复杂度O(n)

逆置—顺序表

int i=0;
int j=n-1;
while(i<j)
{
	int temp;
	temp=L[i];
	L[i]=L[j];
	L[j]=temp;
}

时间复杂度O(n)

逆置—单链表
//p为头结点、r为尾结点

while(p->next!=r)
{
	temp = p->next;
	p->next = temp->next; //将第一个结点拿出,赋值给temp
	temp->next = r->next;
	r->next = temp;            //将temp放在r的后面
}

时间复杂度O(n)

合并—顺序表

int i=0;//将L1、L2合并到L中
int j=0;
int k=0;
for(;i<L1_Size&&j<L2_Size;k++)
{
	if(L1[i]<L2[j])
		L[k]=L1[i++];
	else
		L[k]=L2[j++];
}
while(i<L1_Size)
	L[k++]=L1[i++];
while(j<L2_Size)
	L[k++]=L2[i++];

时间复杂度O(n)
需要额外空间

合并—单链表

while(p->next!=NULL&&q->next!=NULL)
{
	if(p->next->data<q->next->data)
	{
		r->next=p->next;	       //把P的后继放在r的后继上
		p->next=p->next->next;//指针域,移除p的后继
		r=r->next;	       //r后移
	}
	else
	{
		r->next=q->next;
		q->next=q->next->next;
		r=r->next;
	}
}
if(p->next!=NULL)
	r->next = p->next;
if(q->next!=NULL)
	r->next = q->next;
free(p);
free(q);

时间复杂度O(n)
不需要额外空间

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法笔记2(线性表) 的相关文章

  • 以OpenGL/ES视角介绍gfx-hal(Vulkan) Shader/Program接口使用

    文档列表见 Rust 移动端跨平台复杂图形渲染项目开发系列总结 目录 背景 The right way to tackle this in Vulkan is to use resource descriptors A descriptor
  • 50个c/c++源代码网站

    C C 是最主要的编程语言 这里列出了50名优秀网站和网页清单 这些网站提供c c 源代码 这份清单提供了源代码的链接以及它们的小说明 我已尽力包括最佳的C C 源代码的网站 这不是一个完整的清单 您有建议可以联系我 我将欢迎您的建 议 以
  • 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.29. Coreutils-8.23...

    Coreutils 软件包包含用于显示和设置基本系统特性的工具 大概编译时间 2 5 SBU 需要磁盘空间 193 MB 6 29 1 安装 Coreutils POSIX 要求 Coreutils 中的程序即使在多字节语言环境也能正确识别
  • 算法--将数组分成和相等的多个子数组,求子数组的最大个数

    作者 陈太汉 一个整数数组 长度为n 将其分为m份 使各份的和相等 求m的最大值 比如 3 2 4 3 6 可以分成 3 2 4 3 6 m 1 3 6 2 4 3 m 2 3 3 2 4 6 m 3 所以m的最大值为3 算法 原理的思想是
  • 将二叉树转为有序的双向链表

    一 题目要求 输入一棵二叉排序树 现在要将该二叉排序树转换成一个有序的双向链表 而且在转换的过程中 不能创建任何新的结点 只能调整树中的结点指针的指向来实现 include
  • BP神经网络与Python实现

    人工神经网络是一种经典的机器学习模型 随着深度学习的发展神经网络模型日益完善 联想大家熟悉的回归问题 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数 并使用该函数进行预测 网络的训练过程即为调节该函数参数提高预测精度的过程
  • 一文弄懂循环链表、双向链表、静态链表

    循环链表 双向链表 静态链表 三遍定律 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 1 循环链表 将单链表中终端结点的指针端由空指针改
  • 链表和线性表的优缺点

    链表和线性表的优缺点 作为我们最先接触的两个数据结构 链表和线性表的优缺点都较为明显 并且二者互相补足 文章目录 链表和线性表的优缺点 线性表 线性表的组成 线性表的缺点 线性表的优点 链表 链表的组成 链表的优点 链表的缺点 总结 线性表
  • 逆波兰表达式求值(C语言实现)

    实验项目 从文本文件输入任意一个语法正确的 中缀 表达式 显示并保存该表达式 利用栈结构 把上述 中缀 表达式转换成后缀表达式 并显示栈的状态变化过程和所得到的后缀表达式 利用栈结构 对上述后缀表达式进行求值 并显示栈的状态变化过程和最终结
  • 数据结构与算法学习总结(六)——字符串的模式匹配算法

    基本概念 字符串是一种特殊的线性表 即元素都是 字符 的线性表 字符是组成字符串的基本单位 字符的取值依赖于字符集 例如二进制的字符集为0 1 则取值只能为 0 1 再比如英语语言 则包括26个字母外加标点符号 例如 abcde 就是一个字
  • 手把手教你实现一个向量

    文章目录 什么是向量 向量提供哪些接口 实现 宏定义 定义类 成员变量 构造函数与析构函数 构造函数 析构函数 成员函数 size get r put r e expand insert r e remove lo hi remove r
  • Python 实现列队

    1 列队定义 队列是项的有序结合 其中添加新项的一端称为队尾 移除项的一端称为队首 当一个元素从队尾进入队列时 一直向队首移动 直到它成为下一个需要移除的元素为止 最近添加的元素必须在队尾等待 集合中存活时间最长的元素在队首 这种排序成为
  • 算法学习——贪心算法之币种统计

    算法描述 币种统计 单位给每一位员工发工资 精确到元 为了保证不临时换零钱 使得每个员工取款的张数最少 在取工资前统计所有员工所需要的各种票面的张数 约定票种为100 50 20 10 5 2 1元 并验证币种统计是否正确 算法思路 算法描
  • Linux下进程退出的几种形式

    进程退出 Linux 下进程的退出分为正常退出和异常退出两种 1 正常退出 a 在main 函数中执行return b 调用exit 函数 c 调用 exit 函数 2 异常退出 a 调用about函数 b 进程收到某个信号 而该信号使程序
  • Leetcode1094. 拼车

    Every day a Leetcode 题目来源 1094 拼车 解法1 差分数组 对于本题 设 a i 表示车行驶到位置 i 时车上的人数 我们需要判断是否所有 a i 都不超过 capacity trips i 相当于把 a 中下标从
  • 数组实现循环队列(增设队列大小size)

    目录 一 前言 1 如何实现循环 2 如何判断队列为空 3 如何判断队列为满 二 循环队列的结构定义 三 循环队列的创建及其初始化 四 入队 五 出队 六 取队头元素 七 取队尾元素 八 循环队列判空 九 循环队列判满 十 循环队列销毁 一
  • 【数据结构】单链表的定义和操作

    目录 1 单链表的定义 2 单链表的创建和初始化 3 单链表的插入节点操作 4 单链表的删除节点操作 5 单链表的查找节点操作 6 单链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子
  • 从源码角度来谈谈 HashMap

    HashMap的知识点可以说在面试中经常被问到 是Java中比较常见的一种数据结构 所以这一篇就通过源码来深入理解下HashMap 1 HashMap的底层是如何实现的 基于JDK8 1 1 HashMap的类结构和成员 HashMap继承
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤

随机推荐

  • vray渲染不了 全白_救急!!! vray for sketchup 渲染出来全白 !!求解决。。。重金...

    你说的白强是不是打的VR灯光啊 如果是把VR灯光勾成不可见 另外总体看你的灯光太亮了 调低即可 追问有时候我用Vray渲染 它有一个等待的时间 但是等完了又什么都没生成 就像我刚才没使用一样 这个是为什么呢 难道是有些不合理的地方 比如我在
  • c++模板元

    模版元 主要解决递归加速 单纯的递归会反复调用 函数等待 返回 所需时间多 模版元编译的时候慢 代码会增加 把运行时间节约在编译时 template
  • 深度解析V-REP Remote API (MATLAB) 的应用

    OS Win10 x64 V REP V REP PRO EDU 3 5 0 MATLAB 2016b 下面我们来聊一聊V REP中MATLAB远程API的应用 如果你只对V REP有基本了解 对V REP的远程API不熟悉 强烈建议你先阅
  • LeetCode高频算法刷题记录10

    文章目录 1 旋转图像 中等 1 1 题目描述 1 2 解题思路 1 3 代码实现 2 组合总和 中等 2 1 题目描述 2 2 解题思路 2 3 代码实现 3 回文链表 简单 3 1 题目描述 3 2 解题思路 3 3 代码实现 4 字符
  • 基于YOLOv5的血细胞识别和计数

    VOC格式标注转为yolov5格式 原数据格式是xml文件对目标细胞注释 现在需要将这种注释转换为yolov5所需的格式 即每个图像对应一个txt文件 文件中存储该图像中全部细胞的类别和坐标 一行存储一个细胞的信息 如下图 编写脚本进行注释
  • [Unity]各种Debug方法笔记

    无论是萌新还是Dalao 遇到Bug总是难免的 拒绝反驳 所以一些好的Debug方法就显得尤为重要 这篇文章既写给自己 也给看到文章的大家一个参考 内容主 quan 要 bu 是脚本的Debug方法 ps 如有出错漏记得以我能看到的方式指出
  • COCO数据处理(二)根据自己提取的类的json文件生成对应的mask二值图并画在原图上

    文章目录 COCO数据集根据json文件生成mask二值图 文件目录 目录说明 代码 一 生成mask图 代码 二 将mask图画在原图上 效果图 COCO数据集根据json文件生成mask二值图 文件目录 目录说明 data coco a
  • java中JDBC当中请给出一个DataSource的HelloWorld例子

    马克 to win 在前面 的jdbc的Helloworld程序当中 我们用DriverManager来获取数据库连接 事实上通过这种方法获取数据库连接 是比较耗费计算机资 源的 当然了 这也是没有办法的事儿 就像我们买贵书必须花大价钱一样
  • 【Android】App开发-布局篇

    UI的开发离不开各个组件的精准布局 在我们学习了控件之后 控件篇 我们就需要对这些控件进一一排布 让它们在各个指定的位置 目录 LinearLayout线性布局 RelativeLayout布局 FrameLayout布局 TableLay
  • 【Python爬虫】将爬下来的数据保存到redis数据库里面

    redis库中的Redis类对Hash数据类型操作的常用方法 方法名 具体说明 hset name key value 哈希中添加一个键值对 hmset name mapping 设置哈希中的多个键值对 hmget name keys ar
  • 逻辑架构和物理架构

    逻辑架构和物理架构 理论上划分了5种架构视图 分别是 逻辑架构 开发架构 运行架构 物理架构 数据架构 逻辑架构 逻辑架构关注的是功能 包含用户直接可见的功能 还有系统中隐含的功能 或者更加通俗来描述 逻辑架构更偏向我们日常所理解的 分层
  • HTML学习(二)HTML基础

    以这个为例 h1 我的第一个标题 h1 p 我的第一个段落 p DOCTYPE 前用来申明这是一个html 这里的html不区分大小写 HTML标题 HTML 标题 Heading 是通过 h1 h6 标签来定义的 h1 1级标题 h1 H
  • R语言优雅地修改列名称

    R语言优雅地修改列名称 在R语言中 修改数据框 DataFrame 或矩阵 Matrix 的列名称是一项常见的任务 通过优雅地修改列名称 可以提高代码的可读性和可维护性 在本文中 我将介绍几种优雅的方法来修改列名称 并提供相应的源代码示例
  • GPU计算

    文章目录 GPU计算 1 GPU和CPU的区别 2 GPU的主要参数解读 3 如何在pytorch中使用GPU 4 市面上主流GPU的选择 GPU计算 1 GPU和CPU的区别 设计目标不同 CPU基于低延时 GPU基于高吞吐 CPU 处理
  • 95-34-025-Context-AbstractChannelHandlerContext

    文章目录 1 概述 2 继承体系 3 类签名 4 关键字段 5 构造方法 6 ChannelRead事件 6 1 findContextInbound 7 invokeHandler 1 概述 2 继承体系
  • tensorrt转换模型进行了哪些操作

    对于网络layer graph进行的操作 消除输出未使用的层 消除相当于无操作的操作 卷积 偏置和ReLU运算的融合 具有足够相似参数和相同源张量的运算聚合 例如 GoogleNet v5的初始模块中的1x1卷积 inception结构中同
  • DW9718AF.c

    Copyright C 2015 MediaTek Inc This program is free software you can redistribute it and or modify it under the terms of
  • ERP系统总体解决方案 附下载地址

    企业资源计划即 ERP Enterprise Resource Planning 由美国 Gartner Group 公司于1990年提出 企业资源计划是 MRP II 企业制造资源计划 下一代的制造业系统和资源计划软件 除了MRP II
  • 大数据学习框架及指南

    Hadoop生态圈 一 采集 数据从哪里来 主要包括flume等 一 存储 海量的数据怎样有效的存储 主要包括hdfs Kafka 二 计算 海量的数据怎样快速计算 主要包括MapReduce Spark storm等 三 查询 海量数据怎
  • 数据结构与算法笔记2(线性表)

    1 线性表 1 1线性表是一种逻辑关系 见绪论 1 2定义 是具有相同类型的n个元素的有限序列 其中n为表长 n 0时为空表 关键词 相同类型 一般处理的数据元素都是相同类型 比如一个人那么都是人 而不会把人与车放在一起 关键词 有限序列