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,运行结果