1,創建鏈棧的節點 LinkNode
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 棧
{
/// <summary>
/// 鏈棧的節點
/// </summary>
/// <typeparam name="T"></typeparam>
class LinkNode<T>
{
private T data;//存儲數據
private LinkNode<T> next;//指向下一節點
public LinkNode()
{
data = default(T);
next = null;
}
public LinkNode(T data)
{
this.data = data;
next = null;
}
public LinkNode(T data, LinkNode<T> next)
{
this.data = data;
this.next = next;
}
public LinkNode(LinkNode<T> next)
{
this.next = next;
data = default(T);
}
public T Data { get { return data; } set { data = value; } }
public LinkNode<T> Next { get { return next; } set { next = value; } }
}
}
2,創建棧的接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 棧
{
//數序棧
interface ISeqStack<T>
{
int Count { get; }//元素個數(屬性)
int GetLenth();//棧的長度(方法)
bool IsEmpty();//棧是否爲空
void Clear();//清空棧
void Push(T item);//入棧
T Pop();//出棧
T PeekTop();//取得棧頂元素
}
}
3,創建鏈棧
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 棧
{
class LinkStack<T> : ISeqStack<T>
{
private LinkNode<T> top;//棧頂元素節點
private int count = 0;//記錄棧的元素個數
/// <summary>
/// 棧中元素的個數
/// </summary>
public int Count
{
get { return count; }
}
public int GetLenth()
{
return count;
}
public bool IsEmpty()
{
return count == 0;
}
public void Clear()
{
count = 0;
top = null;
}
public void Push(T item)
{
//棧頂元素
LinkNode<T> newNode = new LinkNode<T>(item);
newNode.Next = top;
top = newNode;
count++;
}
public T Pop()
{
T data = top.Data;
top = top.Next;
count--;
return data;
}
public T PeekTop()
{
return top.Data;
}
}
}
4,測試鏈棧
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 棧
{
class Program
{
static void Main(string[] args)
{
//ISeqStack<char> s = new SeqStack<char>(30);
ISeqStack<char> s = new LinkStack<char>();
s.Push('a');
s.Push('b');
s.Push('c');
s.Push('d');
Console.WriteLine("元素 a,b,c,d 入棧之後,棧的元素個數:" + s.Count + " 棧的長度:" + s.GetLenth());
Console.WriteLine("棧頂元素:" + s.PeekTop()); s.PeekTop();
Console.WriteLine("元素 " + s.Pop() + " 出棧之後,棧頂元素:" + s.PeekTop());
Console.WriteLine("元素 " + s.Pop() + " 出棧之後,棧頂元素:" + s.PeekTop());
s.Push('e');
s.Push('f');
s.Push('g');
Console.WriteLine("元素 e,f,g 入棧之後,棧的元素個數:" + s.Count + " 棧頂元素:" + s.PeekTop());
Console.WriteLine("元素 " + s.Pop() + ", " + s.Pop() + " 出棧之後,棧頂元素:" + s.PeekTop());
s.Clear();
Console.WriteLine("清空棧之後,棧的元素個數:" + s.Count + " 棧的長度:" + s.GetLenth());
Console.ReadKey();
}
}
}
5,運行結果