美文网首页程序改变世界unity3D技术分享程序员
性能优化-数组和链表,队列和栈

性能优化-数组和链表,队列和栈

作者: 齊葩 | 来源:发表于2017-01-17 22:47 被阅读141次

数组

数组的内存是连续的,不同的语言有着不同的分配内存规则。有的需要开始的时候指定长度,有的不需要(当数组的长度不够的时候会分配一个新的更长的内存,然后把原来的数据复制过来,这个操作很费时),访问数组中第n个数据的时间花费是O(1),但是要在数组中查找一个指定的数据则是O(N)。

数组内存示意图

当向数组中插入或者删除数据的时候,最好的情况是在数组的末尾进行操作,时间复杂度是O(1),但是最坏情况是插入或者删除第一个数据,时间复杂度是O(N)。在数组的任意位置插入或者删除数据的时候,后面的数据全部需要移动,移动的数据还是和数据个数有关所以总体的时间复杂度仍然是O(N)。

数组插入删除示意图

链表

链表的内存不是连续的。通过指针将各个内存单元链接在一起,不是环形的链表会有一个或者二个节点的指针指向NULL(单项一个,双向两个)。链表不需要提前指定长度,也不会出现长度不够的问题,当需要存储数据的时候分配一块内存并将这块内存插入链表中。

单向链表示意图 双向链表示意图 环形的链表

在链表中查找第n个数据以及查找指定的数据的时间复杂度是O(N),但是插入和删除数据的时间复杂度是O(1),因为只需要调整指针就可以(插入的时候你需要知道插入的数据的前一个数据或者后一个数据,所以双向的更灵活,但是单向和双向都不能向一个方向遍历出所有的数据,所以环形链表诞生了)

链表删除 链表插入

队列

这个数据结构是先进先出的,就像排队买东西一样,先来的先买,数组或者是链表都能实现它,队列只允许在队尾添加数据,在队头删除数据。但是可以查看队头和队尾的数据。还有一种是双端队列,在两端都可以插入和删除

双端队列 队列

这个数据结构是先进后出的,先放进去的数据会被后放进去的数据压到下面,数组或者是链表都能实现它,栈中的数据的所有操作都是在栈的顶部完成的,只可以查看栈顶部的数据,只能够向栈的顶部压入数据,也只能从栈的顶部弹出数据。

点击这里可以看到作者的其他文章

欢迎转载,转载请标明出处

相关文章

  • 性能优化-数组和链表,队列和栈

    数组 数组的内存是连续的,不同的语言有着不同的分配内存规则。有的需要开始的时候指定长度,有的不需要(当数组的长度不...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构与算法之栈与队列

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构java描述

    接口 栈 队列 集合 并查集 映射 数组 链表 栈 数组实现 链表实现 队列 数组实现 链表实现 二分搜索树 集合...

  • 基础算法学习与实践

    数组&链表 1. 快慢指针的方式实现判断链表是否有环 栈和队列 1. 栈实现队列(负负得正) ...

  • 常见的数据结构

    常见的数据结构有: 数组 链表单链表、双向链表、循环链表、双向循环链表、静态链表 栈顺序栈、链式栈 队列普通队列、...

  • 数据结构-队列和栈

    队列和栈都是逻辑结构,其物理结构可以用数组和链表表示。只要记住队列和栈数据操作的特殊性,我觉得就能掌握队列和栈了。...

  • 实现链表_链表实现栈和队列_3

    之前用数组实现栈和队列,虽然有resize操作,但是其实还是静态数组,不是真正的动态。当我们用链表实现栈和队列的时...

  • ARTS-第三周

    Algorithm 这周实现了最基本的动态数据结构链表,并用数组和链表分别实现了栈和队列。 git代码地址 数组和...

  • 第四章_栈和队列_2019-03-20

    基本知识点 栈:先进后出,队列:先进先出 栈和队列都既能用数组实现,又能用链表实现 栈和队列的基本操作:pop()...

网友评论

本文标题:性能优化-数组和链表,队列和栈

本文链接:https://www.haomeiwen.com/subject/dtdvbttx.html