栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

常见的数据结构(上)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常见的数据结构(上)

数据结构和算法001

资源来源网络,仅用于自己学习
时间复杂度- 大O表示法(Big O)

注意:大O 表示法仅仅是一种粗略的分析模型,是一种估算。
空间复杂度-- 估算所需占用的存储空间。
算法的优化方向:

数组

数组是一种顺序存储线性表,所有元素的内存地址是连续的。
数组的内存分布
很多编程语言中 数组无法动态修改容量
需要自己设计动态数组
1.接口设计
动态数组需要以下接口

链表

数组有个明显的缺点, 可能会造成内存空间的大量浪费。
链表可以做到 用多少就申请多少内存。
链表是一种链式存储的线性表,所有的元素地址不一定是连续的。
接口设计
链表的接口大部分和动态数组一样的

双向链表


数组:增删慢,查询快
链表:增删快,查询慢

栈是一种特殊的线性表,只能在一端进行操作。。

入栈:往栈中添加元素的操作,- -般叫做push
出栈:从栈中移除元素的操作,- -般叫做pop

遵循 后进先出 的原则 Last In First Out (LIFO)
这里的栈 和内存中的栈空间是不同的概念

接口设计:

队列(Queue)

队列是一种特殊的线性表,只能再头尾两端进行操作。
队尾(rear ):只能从队尾添加元素,一遍叫做enQueue,入队。
对头(front):只能从对头移除元素,一般叫做deQueue,出队。
·
先进先出的原则 FIFO.

接口设计:

双端队列(Deque)

双端队列是可以在头尾两端添加 删除的队列
英文是deque是 double ended queue 的简称
双端队列两端都可以添加、删除元素。
接口设置:

循环队列(Circle Queue)

在队列的顺序存储表示时,如果还是用之前顺序表的模式来描述,则会显得很浪费空间。

因此采用一种循环的结构去实现队列的顺序存储。一般情况下,我们队满和队空时标志都是

Q->front=Q->rear;因此为了区别两种情况,在这里采用的方法是:牺牲一个元素空间,约定以“队列头指针在队列尾指针的下一位置(指环状的下一位置)上”。

                     循环队列之空队列示意图:

循环队列满队列示意图如下:

入队:
初始化建空队列时,令front=rear=0;每插入新的队列元素时,尾指针增1
出队:
每当删除队列头元素时,“头指针增1”。

循环双端队列

可以进行两端添加、删除操作的循环队列

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号