博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆,栈,队列,串
阅读量:4189 次
发布时间:2019-05-26

本文共 1734 字,大约阅读时间需要 5 分钟。

栈:特点就是一个先进后出的链式结构。

队列:特点就是一个的链式结构。
串不是链式结构,是零个或多个字符组成的有限序列。一般记S=‘a1a2....an ’其中,S是串名,单引号括起的字符序列是串值;ai(1〈=i〈=n)可以是字母,数字或其它字符;串中所包含的字符个数为该串的长度。长度为零的串称为空串,它不包含任何字符。

 

堆栈和栈就是一个概念!!!

 

队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。

而栈就像一个箱子,后放的在上边,所以后进先出。

(堆和它们不同,不存在是先进后出还是先进先出)

 

1.栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。在编程中,例如C/C++中,所有的局部变量都是从栈中分配内存空间,实际上也不是什么分配,只是从栈顶向上用就行,在退出函数的时候,只是修改栈指针就可以把栈中的内容销毁,所以速度最快。 

2.堆(Heap)是应用程序在运行的时候请求分配给自己内存,一般是申请/给予的过程,C/C++分别用malloc/New请求分配Heap,用free/delete销毁内存。由于从操作系统管理的内存分配所以在分配和销毁时都要占用时间,所以用堆的效率低的多!但是堆的好处是可以做的很大,C/C++对分配的Heap是不初始化的。 

3.在中除了简单类型(int,char等)都是在堆中分配内存,这也是程序慢的一个主要原因。但是跟C/C++不同,Java中分配Heap内存是自动初始化的。在Java中所有的对象(包括int的wrapper  Integer)都是在堆中分配的,但是这个对象的引用却是在Stack中分配。也就是说在建立一个对象时从两个地方都分配内存,在Heap中分配的内存实际建立这个对象,而在Stack中分配的内存只是一个指向这个堆对象的指针(引用)而已。

 

 

4.
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}
 
 
5.栈是先进后出的,但是对于堆而言却没有这个特性,两者都是存放临时数据的地方。 对于堆,我们可以随心所欲的进行增加变量和删除变量,不要遵循什么次序,只要你喜欢。
 
******************************************************************************************************************************
 
从变量存储方面来看堆和栈的区别:
 
*程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中;
*这样说比较准确,所谓的栈其实是由寄存器ebp和esp指向的一片内存空间(ebp指向栈底,esp指向栈顶),原则上是由高地址向低地址生长的一片空间,会保存一些临时的数据,比如一个函数中的临时变量以及返回地址,数据的出入是先进后出,后进先出.
*全局变量实际上是存在一个(一般来说正常的编译器)可读可写的内存空间,这个空间是在你写程序编译好的空间地址(由编译器决定),是固定的.
*堆是由操作系统管理的一片空间,事先是没有在进程空间里分配的(比如你在没有分配堆的时候就访问堆空间会报一个内存访问错误),一般是由程序动态的分配出来,一旦分配了以后,一般需要程序去释放自己的堆空间.
***************************************************************************************************************************************************************************
 
*堆,用于保存new 和malloc这些自定义的内存变量;
*全局静态区用于保存全局变量和静态变量;
*字符常量区,用于保存字符串;
*代码区,用于保存

转载地址:http://cynoi.baihongyu.com/

你可能感兴趣的文章
Developing ASP.NET Custom Control With C# Builder
查看>>
近日計劃
查看>>
.NET Framework Security Code Access Security-應用程式篇
查看>>
Designing and Implement Lookup Control for Windows Forms
查看>>
Designing and Implement ButtonEdit Control for Windows Forms
查看>>
如果你是程序员你或许不须以撰写组件维生,但我确信你必定得依赖组件维生!
查看>>
像Component的Control
查看>>
Inside ASP.NET 2.0-即时编译系统
查看>>
修復VS.NET 2005
查看>>
LINQ
查看>>
JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
查看>>
学英语的网站[转载]
查看>>
Asp.net 2.0 自定义控件开发[开发一个图表(WebChart)控件(柱状图示例)](示例代码下载)
查看>>
住在我隔壁储藏室的大学刚毕业的小夫妻[转载]
查看>>
英语学习加油站[收集]
查看>>
Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
查看>>
2007.5.13 祝天下所有的母亲: 节日快乐!
查看>>
Asp.net 2.0自定义控件开发相关的几种嵌入资源解决方案
查看>>
Asp.net 2.0控件开发相关调试(JavaScript调试和自定义控件设计时调试)
查看>>
Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
查看>>