C#实现栈和队列

简介:
有了前一篇 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   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();
        }
    }
文章转自庄周梦蝶  ,原文发布时间5.17
目录
相关文章
|
9月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
127 0
|
机器学习/深度学习 人工智能 C#
C#<数据结构>栈的应用——括号分配问题
C#<数据结构>栈的应用——括号分配问题
87 0
|
C#
【C#/WPF】图像变换的Undo撤销——用Stack命令栈
原文:【C#/WPF】图像变换的Undo撤销——用Stack命令栈 需求: 图层中有一张图片,可以对该图层进行平移、缩放、旋转操作,现在要求做Undo撤销功能,使得图层回复上一步操作时的状态。
889 0
|
Go C# C++
译文---C#堆VS栈(Part Two)
原文:译文---C#堆VS栈(Part Two) 前言          在本系列的第一篇文章《C#堆栈对比(Part One)》中,介绍了堆栈的基本功能和值类型以及引用类型在程序运行时的表现,同时也包含了指针作用的讲解。
1112 0
|
.NET C# 索引
[CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
原文:[CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系   CLR要求所有类型最终都要从System.Object派生。也就是所,下面的两个定义是完全相同的, //隐式派生自System.Object class Employee { ..... } //显示派生子 System.Object class Employee : System.Object { ..... }   由于所有类型最终都是从System.Object派生的,所以可以保证每个类型的每个对象都有一组最基本的方法。
1075 0
|
存储 C#
C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
前言   之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处。   本文的重点就是:值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱。
1050 0
|
存储 C#
C# 堆与栈、值类型与引用类型、可空类型
1.堆与栈 栈是一种先进后出的数据结构,是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义。栈中每个指针(当运行到那个变量时)会指向堆中的某一内存区域或说是空间。堆(heap)就直接是内存区域了,它是为了栈的引用而开发内存的。
917 0