C#实现栈和队列
2023-03-09 22:25:25 时间
有了前一篇C#链表的实现,实现栈和队列易如反掌。
栈,利用单向链表实现:
队列的实现,通过双向链表实现,对于环形数组的实现请参考《数组结构之栈与链表》:
栈,利用单向链表实现:
public abstract class AbstractStack
{
public abstract Object Pop();
public abstract void Push(Object obj);
public abstract bool IsEmpty();
public abstract Object Top();
public abstract void Clear();
}
public class Stack : AbstractStack
{
private SList list;
public Stack()
{
list = new SList();
}
public override bool IsEmpty()
{
return list.IsEmpty();
}
public override void Push(Object obj)
{
list.Push(obj);
}
public override object Pop()
{
return list.Pop();
}
public override object Top()
{
return list.getTail();
}
public override void Clear()
{
list.Clear();
}
}
{
public abstract Object Pop();
public abstract void Push(Object obj);
public abstract bool IsEmpty();
public abstract Object Top();
public abstract void Clear();
}
public class Stack : AbstractStack
{
private SList list;
public Stack()
{
list = new SList();
}
public override bool IsEmpty()
{
return list.IsEmpty();
}
public override void Push(Object obj)
{
list.Push(obj);
}
public override object Pop()
{
return list.Pop();
}
public override object Top()
{
return list.getTail();
}
public override void Clear()
{
list.Clear();
}
}
队列的实现,通过双向链表实现,对于环形数组的实现请参考《数组结构之栈与链表》:
public interface Queue
{
bool IsEmpty();
void Enqueue(Object obj);
Object Dequeue();
Object First();
}
public class ListQueue:Queue
{
private LinkedList list;
public ListQueue()
{
list = new LinkedList();
}
public bool IsEmpty()
{
return list.IsEmpty();
}
public void Enqueue(Object obj)
{
list.Push(obj);
}
public Object Dequeue()
{
return list.Shift();
}
public Object First()
{
return list.getHead();
}
}
{
bool IsEmpty();
void Enqueue(Object obj);
Object Dequeue();
Object First();
}
public class ListQueue:Queue
{
private LinkedList list;
public ListQueue()
{
list = new LinkedList();
}
public bool IsEmpty()
{
return list.IsEmpty();
}
public void Enqueue(Object obj)
{
list.Push(obj);
}
public Object Dequeue()
{
return list.Shift();
}
public Object First()
{
return list.getHead();
}
}
文章转自庄周梦蝶 ,原文发布时间5.17
相关文章
- 态牛-Tech Neo 9月刊:基于算法的IT运维
- Shell逐行处理文本求和,我人傻了...
- 如何实现PHP长网址与短网址
- 用责任链模式实现 OA 系统中的涨薪流程审批
- PHP的垃圾回收机制——引用计数
- 论HTTP性能,Go与.NET Core一争雌雄
- 【Webpack】devServer 实验报告
- 2017年10月编程语言排行榜:Swift回到第16位
- Go语言大神亲述:历七劫方可成为程序员!
- PHP7中我们应该学习会用的新特性
- 如何将 Swift 代码添加为自定义 LLDB 命令
- Dubbo中用到了哪些设计模式?
- 我对Go语言的错误处理有哪些不满,以及我是如何处理的
- 23种设计模式,我竟然秒懂了...
- 遗传算法中几种不同选择算子及Python实现
- 聊聊React开发的一些坑(一)
- 一个函数超过1000行,可以不?
- 如何不 Review 每一行代码,同时保持代码不被写乱?
- 自上而下,逐步揭开PHP解析大整数的面纱
- 一篇带给你Spring Cloud Sleuth入门介绍