冷风.NET

    ---默默無聞
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#中使用堆棧

Posted on 2005-02-21 11:33  冷风.net  阅读(712)  评论(0)    收藏  举报
1。定義一個椎棧類
using System;

namespace Stack
{
    
/// <summary>
    
/// 堆棧類
    
/// </summary>

    public class stack
    
{
        
public stack(){}

        
private int count=0;//堆棧中的數目
        private Node curNode=null;    //堆棧中的當前節點

        
/// <summary>返回椎棧中節點的個數</summary>
        public int Count
        
{
            
get{return count;}
        }

        
/// <summary>
        
/// 進棧
        
/// </summary>
        
/// <param name="o">進棧對象</param>

        public void Push(object o)
        
{
            curNode 
= new Node(o,curNode);
            count
++;
        }

        
/// <summary>
        
/// 出棧
        
/// </summary>
        
/// <returns>棧內當前節點值</returns>

        public object Pop()
        
{
            
if(curNode==null)
            
{
                
throw new Exception("空棧!");
            }

            
else
            
{
                
object objValue = curNode.Value;
                curNode 
= curNode.NextNode;
                count
--;
                
return objValue;
            }

        }

        
    }


    
/// <summary>
    
/// 椎棧中節點類(原采用的是結構,但在結構中不參定義本身的對象,如下的Node變量)
    
/// </summary>

    public class Node
    
{
        
private Node _next;
        
private object _value;
        
public Node(object v) : this(v,null){}
        
public Node(object v,Node o)
        
{
            _next 
= o;
            _value 
= v;
        }

        
public Node NextNode
        
{
            
get{return _next;}
        }

        
public object Value
        
{
            
get{return _value;}
        }

    }

}

2。調用
private stack obj = new stack();
        
private void Form1_Load(object sender, System.EventArgs e)
        
{
            
            
for(int i=0;i<100;i++)
            
{
                obj.Push(i);
            }

        }

        
private void button1_Click(object sender, System.EventArgs e)
        
{
            
for(int i=0;i<=obj.Count;i++)
            
{
                richTextBox1.AppendText(obj.Pop().ToString() 
+"\n");
            }

        }