Csharp-堆栈基础

使用堆栈学习命令模式-基于Unity命令模式
堆栈、队列是 数据结构中的知识
1、神马的堆(Heap)?

原理:负责保存对象、能在任意时间被访问。没有任何的限制 动态释放内存(理解为手动释放)
堆(Heap)
顺序随意

堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
图-1

2、神马是栈(Stack)?先进后出、后进先出

原理:栈是有顺序的,是一片连续的内存域,保持着先进后出的原则,由系统自动分配和维护。是编译期间就分配好的内存空间,因此代码中必须就栈的大小有明确的定义。表尾允许进行插入删除操作,称为栈顶(Top),另一端是固定的,称为栈底(Bottom)。
那么栈的成员方法有那些?
通俗的讲:栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。
直白点来说:栈是用的比较多的东西。

成员方法:
Push():将对象插入到栈的顶部
Pop():移除并返回栈顶部的一个对象
Peek():返回栈顶部第一个对象、但不删除对象
Clear():移除所有元素

在这里插入图片描述
图-2
所以这里上代码了:
图-4
3、堆和栈的区别?
栈和堆中主要放置了四种类型的数据:
值类型(Value Type),
引用类型(Reference Type),
指针(Pointer),
指令(Instruction)

栈顶和栈顶的区分在于:栈是没有大小限制的、栈顶即为当前对象的方法体开始、栈尾最后一个对象的方法尾
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

图-3
堆栈(Stack) 是一种特殊的线性表,是一种操作只允许在尾端进行插入或删除等操作的线性表。

4、神马是队列(Queue)?先进先出(后进后出)

原理:特殊的一种线性表、只允许在表的前端(Front)进行“删除”操作、在表的后端(Rear)进行“添加”操作

队列是一种特殊的线性表,它只允许在表的前端(Front)进行删除操作,而在表的后端(Rear)进行插入操作。
进行插入操作的表尾称为队尾(Rear),把进行其他操作的头部称为队头(Front)。
队列中没有元素时,称为空队列,队列具有先进先出(FIFO)的特点。

队列(Queue)是插入操作限定在表的尾部而其他操作限定在表的头部进行的线性表。
顺序队列(Sequence Queue)用一片连续的存储空间来存储队列中的数据元素,类似于顺序表,用一维数组来存放队列中的数据元素。
循环顺序队列(Circular sequence Queue)解决顺序队列的假溢出的方法是将顺序队列看成是首位相接的循环结构。
链队列(Linked Queue)队列的另外一种存储方式是链式存储,通常用单链表表示。

成员方法:
Contains():判断元素是否在队列中
Dequeue():移除并返回 队列前端的对象
Enqueue():向对象后端(尾部)添加一个对象
Clear():从队列中移除所有元素

在这里插入图片描述在这里插入图片描述

下面的话是使用堆栈来实行命令模式的图:
在这里插入图片描述

发布了29 篇原创文章 · 获赞 2 · 访问量 782

猜你喜欢

转载自blog.csdn.net/zhanxxiao/article/details/104566735
今日推荐