堆,栈,队列,链表,数组
来源:互联网 发布:雷士照明淘宝旗舰店 编辑:程序博客网 时间:2024/06/04 20:02
堆和栈从操作系统和数据结构中加以区别:
从OS:堆需要程序猿分配内存空间,比如使用malloc函数来进行动态分配,其内存空间可以使不连续的,从链表中查找,大小可自由分配,比如在C语言中定义的指针类型的变量,便是需要程序猿进行自行分配内存大小,显然速率偏慢;而栈则是编译时计算机进行分配,是一段连续的内存空间,大小只有2M左右,速率相对较快,在C语言中 函数的参数从右往左入栈,然后是局部变量,注意静态变量不入栈。
从数据结构:堆是一个数组对象,比如堆排序,二叉树之类的,还有运用于优先级队列,比如基于最大堆和最小堆;而栈则是基于一个LIFO规则的数据结构,只有一个口,叫做栈顶,其进行的操作(PUSH and POP)也都是在栈顶进行。
队列:队列有两个口,作用于队列上的INSERT操作,称为入队(ENQUEUE),其称作为队尾,作用于队列上的DELETE操作,称为出队(DEQUEUE),其称为对头,队列是遵循FIFO规则,最新插入的元素将会是最新被删除的元素。循环队列值得是队列中的元素形成环形,队尾的最后一个元素和对头的元素相接,此时若试图插入新元素,便会出现队列上溢,既然有队列上溢,自然而然就有队列下溢,所谓的队列下溢,便是当队列为空时 ,执行DELETE操作。
链表和数组的区别:
链表:链表中的各对象是按线性排序的,顺序由各对象中的指针决定,其的内存空间可以不连续,是由一个个节点组成的,node=data+node next ,也就是每个节点都会有数据和节点指针,有一个头节点指向后面的节点,最后一个节点指向NULL,链表的长度是可伸缩的,对数据操作方便,但访问困难。此外,链表还增加了结点指针域,开销相对较大。有单向链表和双向链表
数组:数组也是线性排序,但顺序是由下标决定的,其的内存空间是连续的,在定义时必须给出数组大小,分配内存空间,数组对数据的访问简单,但对数据的操作困难。
2014.12.4更新:(1)数组栈的创建,push,pop,peep,swap;
(2)链表栈的创建,push,pop,peep,swap;
(3)栈计算后缀表达式;
(4)仙人掌栈(多个分栈);
(5)MTFL(most to front list)模型用于搜索;
(6)栈的回溯算法,不断地压栈和弹栈
- 堆,栈,队列,链表,数组
- 常见的线性列表结构---【数组、链表、栈、队列、堆】
- 算法与数据结构-数组/链表/堆/栈/队列的存储
- 数据结构:链表,栈堆,队列
- 图解堆算法、链表、栈与队列
- 哈希表、堆、栈、队列
- 堆与栈 队列
- C++栈、堆、队列
- 堆、栈与队列
- 堆、栈与队列
- 栈,堆,队列
- 总结: 堆、栈、队列
- 优先队列的数组、二叉堆实现
- C++ 数组、链表、栈、队列
- 数组、链表与栈和队列的关系以及堆和栈的关系
- 堆,栈,队列的区别
- 栈、队列、堆的区别
- 数据结构堆、栈、队列区别
- 关于js中的贪婪匹配的问题
- 推荐20个很有帮助的web前端开发教程
- IIS服务器下,用asp.net访问Access数据库遇到的路径问题解决方案
- Unity内存申请和释放
- [IOS]关于 initWithNibName 和 loadNibNamed 的区别和联系
- 堆,栈,队列,链表,数组
- Android 前台Service实现
- mongoDB 安装 和设置
- 去空格
- Android安卓开发中终止线程方法
- document.body.scrollTop用法
- oracle 表空间使用率查询
- gbk转utf8
- hlist_head