Java中的链表实现介绍
Java中的链表实现介绍
学习数据结构的的链表和树时,会遇到节点(node)和链表(linked list)这两个术语,节点是处理数据结构的链表和树的基础。节点是一种数据元素,包括两个部分:一个是实际需要用到的数据;另一个存储下一个节点位置【用数据结构中的术语,称为数据域(Data field) 与 指针域(pointer field)】。链表是一系列节点串联形成的数据结构,链表中的元素在内存中并不是连续的。
本文仅以单链表为例介绍。
单链表只有一个指向其他节点的变量,也就是在这种类型的数据结构中,任何两个数据元素之间只有一个链接,参见下图:
链表的操作包括了创建、删除、插入、输出等。
创建就是空间的分配,将头、尾指针及链表结点个数等初始化。删除和插入根据被操作元素的位置可以细分为头删除(插入),尾删除(插入),中间删除(插入)。
插入操作
头插入实际上是增加一个新节点,然后把新增加的结点指针指向原来头指针指向的元素,再把头指针指向新增的节点。
尾插入也是增加一个新节点,该节点指针置为null,然后把原尾结点指针指向新增加的节点,最后把尾指针指向新增加的节点即可。
中间插入稍复杂,首先增加一个节点,然后新增节点的指针指向插入位置的后一个节点,把插入位置的前一个节点指针指向新插入节点即可。
删除操作
删除头元素时,先将头指针指向下一个节点,然后把原头结点的指针置空即可。
删除尾元素时,首先找到链表倒数第2个元素,然后把尾指针指向这个元素,接着把原倒数第2个元素的指针置空。
删除中间元素相对复杂一些,首先将要删除的节点的前一个节点指针指向要删除的节点的下一个节点,然后把要删除节点的指针置空。
上面提到是单链表最基本的操作,除此之外还有其它操作不多说了。下面给出代码示例。
下面介绍两种实现方式。
一、使用Java.util 包的LinkedList类实现
JAVA提供的LinkedList类简要介绍
JAVA提供的LinkedList类,它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能进行列表的相关操作。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList官方文档LinkedList (Java Platform SE 8 )
LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.LinkedList;
常用的方法(Method)及说明
public boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。 |
public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。 |
public void addFirst(E e) | 元素添加到头部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回第一个元素。 |
public E removeLast() | 删除并返回最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public boolean contains(Object o) | 判断是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 设置指定位置的元素。 |
public Object clone() | 克隆该列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回链表元素个数。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
public Object[] toArray() | 返回一个由链表元素组成的数组。 |
public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |
JAVA提供的LinkedList类使用示例(来源https://www.cnblogs.com/jbclown/p/16024181.html ),源码如下:
import java.util.LinkedList; // 引入 LinkedList 类
public class LinkedListTest {
public static void main(String[] args) {
//引入LinkedList类
LinkedList<String> lList = new LinkedList<String>();
//添加元素
lList.add("hello");
lList.add("world");
lList.add("java");
lList.add("LinkedList");
//链表元素个数
System.out.println(lList.size());
//getFirst()方法获取头部元素
System.out.println(lList.getFirst()); //hello
//addFirst() 在头部添加元素
lList.addFirst("the"); //[the, hello, world, java, LinkedList]
System.out.println(lList);
//addLast() 在尾部添加元素
lList.addLast("ArrayList"); //[the, hello, world, java, LinkedList, ArrayList]
System.out.println(lList);
// removeFirst() 移除头部元素
lList.removeFirst(); // [hello, world, java, LinkedList, ArrayList]
// set(int index, E element) 指定元素替换指定位置的元素
lList.set(1,"the"); //[hello, the, java, LinkedList, ArrayList]
System.out.println(lList);
// add( int index,E element) 指定位置插入元素
lList.add(2,"world"); //[hello, the, world, java, LinkedList, ArrayList]
System.out.println(lList);
// for-each 迭代元素
System.out.println("for-each 迭代元素:");
for (String s : lList){
System.out.println(s);
}
}
}
输出:
4
hello
[the, hello, world, java, LinkedList]
[the, hello, world, java, LinkedList, ArrayList]
[hello, the, java, LinkedList, ArrayList]
[hello, the, world, java, LinkedList, ArrayList]
for-each 迭代元素:
hello
the
world
java
LinkedList
ArrayList
二、自定义实现类实现
我们也可以自定义实现类似功能,请看下面的介绍。
Java单向链表的代码实现(java单向链表的模拟实现_java模拟单向链表_忆兮513的博客-CSDN博客 )
由链表类MyList、测试类main和异常类IndexOutOfException组成
链表类MyList源码:
public class MyList {
public static class ListNode{
int val;
public ListNode next;
public ListNode(int val){
this.val=val;
}
};
public ListNode head;
public void createList(){
ListNode ListNode1=new ListNode(45);
ListNode ListNode2=new ListNode(35);
ListNode ListNode3=new ListNode(55);
ListNode ListNode4=new ListNode(34);
ListNode1.next=ListNode2;
ListNode2.next=ListNode3;
ListNode3.next=ListNode4;
ListNode4.next=null;
this.head=ListNode1;
}
public void display(){
/**
* 这样会把head弄成空
*/
/*while(head!=null){
System.out.print(head.val+" ");
head=head.next;
}*/
ListNode cur=head;
while(cur!=null){
System.out.print(cur.val+" ");
cur=cur.next;
}
}
//头插法
public void addFirst(int data) {
ListNode node=new ListNode(data);
node.next=head;
head=node;
}
//尾插法
public void addLast(int data) {
ListNode node = new ListNode(data);
if (head == null) {
head = node;
} else {
ListNode cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = node;
}
}
//检查index是否合法
private void checkindex(int index){
if(index<0||index>size()){
throw new IndexOutOfException("位置不合法,请重新输入:");
}
}
//找到index-1位置的节点
private ListNode FindIndexNode(int index){
ListNode cur=head;
while (index-1!=0){
cur=cur.next;
index--;
}
return cur;
}
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data){
checkindex(index);
if(index==0){
addFirst(data);
return;
}
else if(index==size()){
addLast(data);
return;
}
else {
ListNode node = new ListNode(data);
ListNode cur=FindIndexNode(index);
node.next=cur.next;
cur.next=node;
}
}
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key){
ListNode cur=this.head;
while(cur!=null){
if(cur.val==key){
return true;
}
cur=cur.next;
}
return false;
}
//删除第一次出现关键字为key的节点
public void remove(int key){
ListNode cur=head;
while (cur.next!=null) {
if (cur.next.val == key) {
cur.next = cur.next.next;
return;
}
cur=cur.next;
}
}
//删除所有值为key的节点
public void removeAllKey(int key){
ListNode cur=head.next;
ListNode pre=head;
while(cur!=null){
if(cur.val==key){
pre.next=cur.next;
cur=cur.next;
}else{
pre=cur;
cur=cur.next;
}
}
if(head.val==key){
head=head.next;
}
}
//得到单链表的长度
public int size(){
int count=0;
ListNode cur=head;
while(cur!=null){
cur=cur.next;
count++;
}
return count;
}
public void clear(){
ListNode cur=head;
ListNode curNext=null;
while(cur!=null){
curNext=cur.next;
cur.next=null;
cur=curNext;
}
head=null;
}
}
异常类IndexOutOfException源码:
public class IndexOutOfException extends RuntimeException{
public IndexOutOfException(){
}
public IndexOutOfException(String mes){
super(mes);
}
}
测试类main源码:
public class main {
public static void main(String[] args) {
MyList list=new MyList();
list.createList();
list.display();
System.out.println(list.contains(45));
System.out.println(list.size());
list.addFirst(99);
list.display();
System.out.println();//换行
list.addLast(999);
list.display();
System.out.println();
list.addIndex(1,50);
list.display();
System.out.println();
list.removeAllKey(45);
list.display();
list.clear();
list.display();
}
}
运行结果:
45 35 55 34 true
4
99 45 35 55 34
99 45 35 55 34 999
99 50 45 35 55 34 999
99 50 35 55 34 999
相关文章
- Linux Socket Buffer介绍
一. 前言 Linux内核网络子系统的实现之所以灵活高效,主要是在于管理网络数据包的缓冲器-socket buffer设计得高效合理。在Linux网络子系统中,socket buffer是一个关键的数据结构,它代表一个数据包在内核中处理的整个生命周期。 二. Socket Bu…...
2023/6/2 20:13:28 - 算法刷题打卡第94天: 找出给定方程的正整数解
找出给定方程的正整数解 难度:中等 给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子未知,但它是单调…...
2023/6/3 5:20:13 - Go 数组和切片反思
切片的底层数据结构是数组,所以,切片是基于数组的上层封装,使用数组的场景,也完全可以使用切片。 类型比较 我看到 go 1.17 有对切片和数组转换的优化,禁不住纳闷,有什么场景是必须数组来完成的呢&#x…...
2023/6/2 10:01:26 - MongoDB数据存储格式
前言 之前分享了MongoDB的基本命名和视图等信息,本文分享一下MongoDB的数据存储类型,使用方式。基础的MongoDB信息就学习完啦,之后会继续分享MongoDB进阶的一些东西。 MongoDB数据存储格式前言1 文件结构1.2 字段名称2 点符号2.2 嵌入式文件…...
2023/6/2 6:53:23 - linux系统根文件系统构建
根文件系统构建 一、根文件系统简介 根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统,从根文件系统中读取初始化脚本,比如 rcS,inittab 等。根文件系统和 Linux 内核是分开的,单独的 Linux 内核是没法正常工作的&a…...
2023/6/1 18:02:20 - C++——二叉树排序树
文章目录1 二叉搜索树概念2 二叉搜索树操作与模拟实现2.1 二叉搜索树的查找非递归版本递归版本2.2 二叉搜索树的插入非递归版本递归版本2.3 二叉搜索树的删除非递归版本递归版本3 二叉搜索树的应用(K模型、KV模型)4 二叉搜索树的性能分析1 二叉搜索树概念…...
2023/5/18 15:08:02 - 基于微信小程序的中国各地美食推荐平台小程序
文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.…...
2023/5/5 21:40:35 - Java反序列化漏洞——CommonsCollections4.0版本—CC2、CC4
一、概述4.0版本的CommonsCollections对之前的版本做了一定的更改,那么之前的CC链反序列化再4版本中是否可用呢。实际上是可用的,比如CC6的链,引入的时候因为⽼的Gadget中依赖的包名都是org.apache.commons.collections ,⽽新的包…...
2023/6/5 14:57:33 - shell中while内改变外部变量和 < << <<<
代码问题代码使用管道会创建子shell。lines"first line\nsecond line\nthird line" foo0 echo -e $lines | while read line doecho line: $lineif [[ "$line" "second line" ]]thenfoo2 # 此处foo已被赋于2echo "Variable \$foo updated…...
2023/5/9 16:18:36 - Kubernetes是个什么东东?
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语,意…...
2023/5/10 4:55:49 - 数值方法笔记1:数字表示与误差分析
1 有意义数位概念与有意义数位损失 整数的二进制表示使用短除法,网上有很多文章,这里就不再过多赘述了。 提一嘴小数的二进制表示。下面列举了一个例子。 在表示数位的时候,我们使用一个符号sign,一个尾数mantissa,一个指数exponent。 IEEE…...
2023/5/22 8:23:38 - LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见
LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见想使用NI分布式系统管理器监测网络连接实时控制器的CPU和内存使用情况。从左侧窗口的树中选择了感兴趣的实时目标,然后通过选择视图自动视图来确保启用自动查看。希望看到CPU/内存选项卡,但它有显…...
2023/5/9 17:51:16 - Rancher 部署 MySQL
文章目录创建 pvc部署 MySQL前置条件:安装 rancher,可参考文章 docker 部署 rancher 创建 pvc MySQL 数据库是需要存储的,所以必须先准备 pvc 创建 pvc 自定义 pvc 名称选择已经新建好的 storageclass,storageclass 的创建可参考…...
2023/6/5 19:22:43 - 算法导论【字符串匹配】—朴素算法、Rabin-Karp、有限自动机、KMP
算法导论【字符串匹配】—朴素算法、Rabin Karp、有限自动机、KMP朴素字符串匹配算法Rabin-Karp算法有限自动机KMP算法朴素字符串匹配算法 预处理时间:0匹配时间:O((n-m1)m) Rabin-Karp算法 预处理时间:Θ(m),需要预先算出匹…...
2023/5/28 11:28:24 - Unity3D -知识点(1)
1.场景视图鼠标滚轮:场景放大缩小鼠标右键:场景左右平移场景编辑器中,能看到什么?网格,每一格大小为1unit,建模不同,规定不同,(对应屏幕上100个像素)世界坐标系y轴向上为正x轴向右为…...
2023/6/5 5:22:35 - Codeforces Round #748 (Div. 3) -> VP
A (简单模拟)-Elections 题意: 给出三个整数,每次对这个整数加1,问对于每一个整数,最少需要几次操作可以使得,他变成三个数中唯一的最大值. 思路: 对于不等于 max 的元素,最少操作次数为 max -…...
2023/6/8 8:59:15 - IOT2.5|第1章嵌入式系统概论|操作系统概述|嵌入式操作系统
目录 第1章: 嵌入式系统概论 1.嵌入式系统发展史 2.嵌入式系统定义* 3.嵌入式系统特点* 4.嵌入式处理器的特点 5.嵌入式处理分类 6.嵌入式系统的应用领域及嵌入式系统的发展趋势 第8章:Linux内核配置 1.内核概述 2.内核代码结构 第1章…...
2023/5/31 5:52:47 - 保姆级教会你SQL窗口函数
SQL窗口函数SQL中有一个很重要的函数被我们经常用到查询语句中,这个函数就是窗口函数,今天我们就来看看什么是窗口函数以及它的使用方法吧!认识窗口函数窗口函数是一种特殊类型的SQL函数,它可以在指定的窗口范围内计算结果。窗口函…...
2023/5/31 4:24:02 - 软考高级之制定备考计划
制定备考计划 高项准备时间最好是三个月以上,分为三个阶段来复习。 第一个阶段——熟悉知识点 第二个阶段——刷题 第三个阶段——冲刺复习 具体操作 第一个阶段 这个阶段的复习以教材和视频为主,掌握重要知识点。基础知识要打牢。例如࿱…...
2023/6/8 5:31:47 - 子组件实时更新、通用搜索函数、组件递归
这次主要记录一下最近遇到的一些印象比较深刻的问题以及解决方案 1. v-for循环的组件中,内嵌其他组件,用props给子组件传数据,当数据修改的时候,子组件无法及时更新 <template><div><div class"project-ite…...
2023/5/30 22:25:49
最新文章
- 一文说清,4G语音工牌与WIFI和蓝牙语音工牌的区别
作为一种创新的无线音频采集和传输设备,4G语音工牌在许多行业和领域都展现出了巨大的优势和广泛的应用场景。 比如在销售场景和服务场景,利用4G语音工牌和NLP、语音识别、机器学习等技术结合,可实现: 帮销售型企业:提…...
2023/6/9 12:47:36 - Linux远程管理协议(RFB、RDP、Telnet和SSH)
提到远程管理,通常指的是远程管理服务器,而非个人计算机。个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式。 远程管理,实际上就是计算机…...
2023/6/9 12:46:36 - 【 Python 全栈开发 - WEB开发篇 - 29 】MySQL初步
文章目录 一、MySQL介绍二、SQL语言三、MySQL安装与配置第一步:下载压缩文件第二步:解压第三步:配置第四步:登录 一、MySQL介绍 MySQL 是一个开源的关系型数据库管理系统,它使用 Structured Query Language࿰…...
2023/6/9 12:46:23 - 计算机网络开荒2.2-Socket编程
文章目录 一、Socket概述二、Socket API 概述三、WinSock常用API3.1 常用API3.1.1 WSAStartUP3.1.2 WSACleanup3.1.3 Socket3.1.4 Closesocket3.1.5 bind3.1.6 listen3.1.7 connect3.1.8 accept3.1.9 send, sendto3.1.10 recv, recvfrom3.1.11 etsockopt, getsockopt 3.2 网络字…...
2023/6/9 12:46:03 - C++设计模式享元模式
以下是一个用 C 实现的享元模式示例代码: #include <iostream> #include <unordered_map> class Flyweight { private: std::string sharedState; public: Flyweight(std::string state) : sharedState(state) {} void operation(std::string uniqu…...
2023/6/9 12:45:47 - Scrum敏捷认证理论基础知识整理
一、Scrum框架关键点 Scrum框架有3个角色,3个工件,5个事件,5个价值观,简称3355。 3个角色: 产品负责人PO(Product Onwer)开发团队 (Develop Team)敏捷教练(Scrum Master࿰…...
2023/6/9 12:45:35 - webgpu之旅03
19854902 319854902 319854902 319854902 webgpu交Q流群我们找个例子看看别人的renderer three.js v152 首先init函数 看见中间有个对象 WebGPURenderPipelines 跟进去看看 这个构造函数里可以看见有这么些数据 get( renderObject ) {const device this.device;const cache …...
2023/6/9 12:45:14 - 【移动设备】iData 50P 技术规格
系列文章 【移动设备】iData 50P 技术规格 本文链接:https://blog.csdn.net/youcheng_ge/article/details/130604517 【H5】avalon前端数据双向绑定 本文链接:https://blog.csdn.net/youcheng_ge/article/details/131067187 【H5】安卓自动更新方案&a…...
2023/6/9 12:45:02 - joplin的安装和使用
本文主要介绍joplin的安装和坚果云的配合使用 坚果云 先到坚果云的官网注册登录坚果云 官网:https://www.jianguoyun.com/ a、点击右上角昵称 b、点击账户信息 c、安全选项 d、第三方应用管理 e、点击添加应用,输入应用名称Joplin(这里可以自定义) f、…...
2023/6/9 12:44:50 - 四种经典的知识变现盈利模式,看你适合哪一种
哈喽,大家好,我是海哥,知识付费变现创业教练,教育公司培训总监,从事知识付费变现咨询10年,已助力3000人实现知识付费变现。 知识变现有四种典型的盈利模式,看看你合适哪一种? 模式1&…...
2023/6/9 12:44:33 - docker使用笔记
一、安装docker https://docs.docker.com/engine/install/ubuntu/,按照官网命令一步步来即可。 添加当前用户到docker用户组,后面运行docker的时候前面不需要加sudo命令:https://www.cnblogs.com/fireblackman/p/16054371.html 查看自己当前…...
2023/6/9 12:44:16 - 读改变未来的九大算法笔记07_搜索引擎
1. 车库轶事 1.1. 1939年 1.1.1. 戴夫休利特(Dave Hewlett) 1.1.1.1. 惠普(Hewlett-Packard) 1.2. 1976年 1.2.1. 蒂夫乔布斯(Steve Jobs)和史蒂夫沃兹尼亚克(Steve Wozniak) …...
2023/6/9 12:44:02 - c++11 标准模板(STL)(std::bitset)(八)
定义于头文件 <bitset> template< std::size_t N > class bitset; 类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集,并将它与字符串和整数相互转换。 bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssig…...
2023/6/9 12:43:34 - 【工业控制系统安全】深入了解 ICS612:ICS 网络安全:第 1 部分
ICS 从业者可以立即在实际情况中使用他们的 ICS612 培训。 降落飞机 我认识一家生产工厂的首席执行官,我们就叫他比尔吧,他希望他的关键团队成员真正了解他的运营团队每天为实现生产目标而承受的压力。比尔还希望他的经理和支持人员能够理解“让它发生”…...
2023/6/9 12:42:14 - chatgpt赋能python:Python快速打开:如何提高Python执行速度
Python 快速打开:如何提高 Python 执行速度 介绍 Python 是一种解释型语言,由于其简洁易读,广泛用于数据科学、机器学习、Web 开发等领域。然而,它的执行速度相对较慢,这通常是由于其解释器中面临的硬件资源限制以及…...
2023/6/9 12:41:43 - PyTorch教程:Tensor的使用介绍
目录 创建Tensor Tensor的shape tensor数据类型 PyTorch tensor的数学和逻辑运算 Tensor Broadcasting广播 复制tensor 改变维数 和Numpy的转换 Tensor是PyTorch中心的数据抽象,本文深度详细介绍PyTorch的torch.Tensor类。包括创建Tensor的方法,…...
2023/6/9 12:41:29 - C#winform多国语言应用实例
我们在开发项目中,一般需要软件支持多种语言,供不同客户使用。本文实例讲解实现办法。 1 窗体项目创建 添加控件MenuStrip、comboBox及Button,并修改对应显示文本,combobox编辑项输入英语 确定窗体的Localizable属性为true,自动创建Form1.resx,为False时,没有Form1.r…...
2023/6/9 12:41:11 - MATLAB使用技巧之局部放大图的制作及文本箭头的便捷设置
MATLAB使用技巧之局部放大图的制作及文本箭头的便捷设置 文章目录 MATLAB使用技巧之局部放大图的制作及文本箭头的便捷设置制作局部放大图的方法文本箭头的便捷设置小结 本文主要介绍如何在MATLAB中绘制局部放大图和如何便捷地设置文本箭头的相关内容,以作后续回顾之…...
2023/6/9 12:40:41 - 可视化报表系统推荐
在当今信息时代,数据的处理和分析已经成为了企业管理中不可或缺的一部分。而报表则是这个过程中最常见的工具之一。手工写报表虽然简单易懂,但是随着数据量的增加,这种方式逐渐暴露出许多痛点。比如说: 1.时间耗费长:…...
2023/6/9 12:40:18 - 占据80%中国企业出海市场,亚马逊云科技如何为出海客户提供更多资源和附加值
亚马逊云科技就可以做到,作为占据80%中国企业出海市场的亚马逊云科技,其覆盖全球的业务体系,从亚马逊海外购、亚马逊全球开店、亚马逊智能硬件与服务,Amazon Alexa,Amazon Music都是属于亚马逊云科技“梦之队”的一员。…...
2023/6/9 12:40:02