java数据结构之线性表

一、数据结构与算法的关系

1.数据结构是研究组织数据的学科
2.程序 = 数据结构+算法
3.数据结构是算法的基础,如果想要学好算法就必须有良好的数据结构基础

二、线性结构与非线性结构
2.1 线性结构

1.数据元素之间存在一对一的对应关系称之为线性关系
2.线性结构有两种不同的存储结构,即顺序存储结构(数组)链式存储结构(链表)。顺接存储的线性表称之为顺序表,即存储的元素是连续的。
3.链式存储的线性表称为链表,
4.线性结构常见的有:数组、队列、链表和栈。

2.2 非线性结构

非线性结构包括:二维数组、多维数组、广义表、树结构、图结构 (重来没听过 暂作了解

这篇文章我们来说说Java里一个很重要的数据结构——线性表,还是这张图,线性表对应着下图里的List。
如图

2.3 顺序表

顺序表中的元是连续的,内存划分的区域也是连续的,如图
image
java常用的ArrayList的底层就是数组实现的,底层元素在内存中时按顺序排列的,ArrayList是java顺序表的表现

2.5 链表

链表在物理存储上通常是非连续的非顺序的方式存储,数据元素的逻辑顺序是通过链表中的引用来实现的。

单向链表: 链表已节点的方式存储数据,每一个节点中有两个域。data域:存储源数据 next:指向下一个节点地址(即对象)。根据指针来确定一组数据的顺序。
image

循环链表: 循环链表和单向链表一样,只不过在最后一个尾指针的对象又指向了头指针的对象
image

双向链表: 双向链表有三个作用域 data:数据域 next:指针域,指向下一个对象 prev域: 指针域:指向上一个对象
image
linkedList就是以双向链表的方式实现的!!!

  • 单项链表对比双向链表的缺点分析
  1. 单项链表查找的方向只是一个,而双向链表查找的方向是双向的(向前或者向后)
  2. 单项链表不能完成自我删除,需要依靠辅助节点来帮助删除,而双向链表可以完成自我删除
2.6 栈的介绍
  1. 栈的英文(stack)
  2. 栈是一个先入后出的有序列表
  3. 栈是一种操作受限制的线性表。其限制是仅允许在线性表的尾部进行添加和删除,这一段被称为栈顶,另一端被称为栈底。如果要添加一个新元素叫做压栈,删除一个元素叫做出栈
    image

如图所示: 把赵六放到栈中叫做压栈(添加);不放入赵六,把王五从栈中拿出叫做出栈(删除),且只能从栈顶操作元素。
一个例子:最后洗好的盘子都是叠放在最上面的,每次拿的时候都是从最上面拿,最先洗好的盘子反而拿不到。

2.4 队列

栈也是一种操作受限制的线性表。 队列和栈有一些出入,栈是只能在栈顶操作数据,而队列删除数据是在头部,添加数据是在尾部。删除数据的一端就叫队头。
image
看上面的图,只能从队尾添加元素,队头取出(删除)元素。本文第一张图里的Queue就是队列的体现,Queue是基于链表来体现的。注意,Queue是一个接口,直接写如下代码是会报错的

Queue queue = new Queue();//会报错,Queue是接口,不允许实例化

正确的用法是

Queue queue = new LinkedList();//  正确的用法,基于链表来实现

队列的链表实现是通过子类LinkedList来实现的,Queue接口收窄了LinkedList的访问权限,只提供从队尾,队头等的操作。

为了加深大家的印象,我举一个例子,恶心了一点,但保证大家能记住,大家在喝啤酒的过程中,正常去厕所小解的,这个过程叫做队例。喝多了吐出来的过程,叫做栈

  1. 队列是一个有序列表可以用数组或者是链表来实现
  2. 遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入队列的数据,要后取出。
  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值