随笔 - 163  文章 - 2  评论 - 370  阅读 - 46万 
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来,它只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。

栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。

1、进栈(PUSH)算法
1、若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
2、置TOP=TOP+1(栈指针加1,指向进栈地址);
3、S(TOP)=X,结束(X为新进栈的元素);

2、退栈(POP)算法
1、若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
2、X=S(SOP),(退栈后的元素赋给X);
3、TOP=TOP-1,结束(栈指针减1,指向栈顶)。

下面看一下栈的实现接口:
复制代码
   public interface IStack<T>
   {
       
int Length();
       
bool IsEmpty();
       
void Clear();
       
void Push(T items);
       T Pop();
       T GetPopValue();
   }
复制代码

下面的代码是栈的实现的类:
Code


下面进行测试:

      

Code


当你需要把对象的顺序反过来的时候,你就可以按顺序把对象放栈里,然里再从栈里取出来,这时功能就实现了。











posted on   风浪  阅读(530)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示