堆、栈以及队列
2018-10-09 06:47:01来源:博客园 阅读 ()
这个也是比较容易翻车的东西,记录一下
堆
1,有人老是搞不明白堆和栈的叫法。我来解释下:
堆:在c里面叫堆,在c#里面其实叫托管堆。为什么叫托管堆,我们往下看。
栈:就是堆栈,因为和堆一起叫着别扭,就简称栈了。
2,托管堆:
托管堆不同于堆,它是由CLR(公共语言运行库(Common Language Runtime))管理,当堆中满了之后,会自动清理堆中的垃圾。所以,做为.net开发,我们不需要关心内存释放的问题。
3,什么是内存堆栈与数据结构堆栈,我们来看看什么是内存堆栈,什么是数据结构堆栈
①数据结构堆栈:是一种后进先出的数据结构,它是一个概念,图4-1中可以看出,栈是一种后进先出的数据结构。
②内存堆栈:存在内存中的两个存储区(堆区,栈区)。
栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放
堆区:存放着引用类型的对象,由CLR释放
栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(TOP),对栈的基本操作有进栈(Push)和出栈(POP),俗称后进先出
由于栈是一个表,因此任何实现表的方式都能实现栈
栈用C#实现的方式:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnilateralismChainTable; namespace StackApply { public class CStack { //调用链表类 private Clist m_List; public CStack() { //构造函数 m_List = new Clist(); } /// <summary> /// 压入堆栈 /// </summary> public void Push(int PushValue) { //参数: int PushValue 压入堆栈的数据 m_List.Append(PushValue); } /// <summary> /// 弹出堆栈数据,如果为空,则取得 2147483647 为 int 的最大值; /// </summary> public int Pop() { //功能:弹出堆栈数据 int PopValue; if (!IsNullStack()) { //不为空堆栈 //移动到顶 MoveTop(); //取得弹出的数据 PopValue = GetCurrentValue(); //删除 Delete(); return PopValue; } // 空的时候为 int 类型的最大值 return 2147483647; } /// <summary> /// 判断是否为空的堆栈 /// </summary> public bool IsNullStack() { if (m_List.IsNull()) return true; return false; } /// <summary> /// 堆栈的个数 /// </summary> public int StackListCount { get { return m_List.ListCount; } } /// <summary> /// 移动到堆栈的底部 /// </summary> public void MoveBottom() { m_List.MoveFrist(); } /// <summary> /// 移动到堆栈的Top /// </summary> public void MoveTop() { m_List.MoveLast(); } /// <summary> /// 向上移动 /// </summary> public void MoveUp() { m_List.MoveNext(); } /// <summary> /// 向上移动 /// </summary> public void MoveDown() { m_List.MovePrevious(); } /// <summary> /// 取得当前的值 /// </summary> public int GetCurrentValue() { return m_List.GetCurrentValue(); } /// <summary> /// 删除取得当前的结点 /// </summary> public void Delete() { m_List.Delete(); } /// <summary> /// 清空堆栈 /// </summary> public void Clear() { m_List.Clear(); } } }
队列也是表,然而使用队列时插入在一端进行而删除在另一端进行,这一点跟栈不一样的地方就是队列是先进先出的
对于队列的基本操作有入队和出队
队列用C#实现的方式:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnilateralismChainTable; namespace Alignment { /// <summary> /// 队列类 /// </summary> public class CQueue { private Clist m_List; public CQueue() { //构造函数 //这里使用到前面编写的List m_List = new Clist(); } /// <summary> /// 入队 /// </summary> public void EnQueue(int DataValue) { //功能:加入队列,这里使用List 类的Append 方法: //尾部添加数据,数据个数加1 m_List.Append(DataValue); } /// <summary> /// 出队 /// </summary> public int DeQueue() { //功 能:出队 //返回值: 2147483647 表示为空队列无返回 int QueValue; if (!IsNull()) { //不为空的队列 //移动到队列的头 m_List.MoveFrist(); //取得当前的值 QueValue = m_List.GetCurrentValue(); //删除出队的数据 m_List.Delete(); return QueValue; } return 2147483647; } /// <summary> /// 判断队列是否为空 /// </summary> public bool IsNull() { //功能:判断是否为空的队列 return m_List.IsNull(); } /// <summary> /// 清空队列 /// </summary> public void Clear() { //清空链表 m_List.Clear(); } /// <summary> /// 取得队列的数据个数 /// </summary> public int QueueCount { get { //取得队列的个数 return m_List.ListCount; } } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:面试经验分享(面试要主动)
- xpath的数据和节点类型以及XPath中节点匹配的基本方法 2019-09-02
- 【转载】 C#中float、double以及decimal类型有何不同 2019-07-23
- 微服务学习前言 2019-07-10
- 基于asp.net的web页面动态控件创建以及使用 2019-06-16
- 【转载】申请软件著作权需要哪些材料以及相应流程(注:此文 2019-05-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash