数据结构学习笔记四

栈和队列

栈和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制。栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表。

1.栈

1.1 顺序栈
用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequence Stack)。类似于顺序表,用一维数组来存放顺序栈中的数据元素。栈顶指示器top设在数组下标为0的端,top随着插入和删除而变化,当栈为空时,top=-1。

1.2 链栈
栈的另外一种存储方式是链式存储,这样的栈称为链栈(Linked Stack)。链栈通常用单链表来表示,它的实现是单链表的简化。

因为顺序栈等其他常见的数据结构c#里面都已经实现好了,所以在这我来把链栈的代码敲出来,练下自己的手,巩固一下知识,顺便

 

代码
    // 由于链栈的操作只是在一端进行,为了操作方便,把栈顶设在链表的头部,并且不需要头结点。
     public   class  Node < T >
    {
        
private  T data;
        
private  Node < T >  next;

        
#region  构造器
        
// 构造器
         public  Node(T val, Node < T >  p)
        {
            data 
=  val;
            next 
=  p;
        }
        
// 构造器
         public  Node(Node < T >  p)
        {
            next 
=  p;
        }
        
// 构造器
         public  Node(T val)
        {
            data 
=  val;
            next 
=   null ;
        }
        
public  Node()
        {
            data 
=   default (T);
            next 
=   null ;
        }
        
#endregion  

        
#region  访问器

        
public  T Data
        {
            
get
            {
                
return  data;
            }
            
set
            {
                data 
=  value;
            }
        }

        
public  Node < T >  Next
        {
            
get
            {
                
return  next;
            }
            
set
            {
                next 
=  value;
            }
        }

        
#endregion
    }

    
// 链栈实现
     public   class  LinkedStack < T >
    {
        
private  Node < T >  top;
        
private   int  num;

        
public  Node < T >  Top
        {
            
get
            {
                
return  top;
            }
            
set
            {
                top 
=  value;
            }
        }

        
public   int  Num
        {
            
get
            {
                
return  num;
            }
            
set
            {
                num 
=  value;
            }
        }

        
public   bool  IsEmpty()
        {
            
if  (num  ==   0 )
            {
                
return   true ;
            }
            
else
            {
                
return   false ;
            }
        }

        
// 入栈
         public   void  Push(T item)
        {
            Node
< T >  p  =   new  Node < T > (item);
            
if  (top  ==   null )
            {
                top 
=  p;
            }
            
else
            {
                p.Next 
=  top;
                top 
=  p;
            }
            
++ num;
        }

        
// 出栈
         public  T Pop()
        {
            
if  (IsEmpty())
            {
                
return   default (T);
            }
            
else
            {
                Node
< T >  p  =   new  Node < T > ();
                p 
=  top;
                top 
=  p.Next;
                
-- num;
                
return  p.Data;
            }
        }



    }

 

 

你可能感兴趣的:(数据结构)